strutsaction属性不能从外部javaScript访问

Struts Action property can't be accessed from external javaScript

本文关键字:javaScript 访问 从外部 不能 属性 strutsaction      更新时间:2023-09-26

我正在做一个使用struts2的项目。在我的Action类我有一个字符串testString与setter/getter,我可以访问它从我的jsp文件使用${testString}。没问题。

现在我需要从javascript中访问它,并在我的jsp文件中尝试一个内部脚本,如下所示:

<script >
function testJs() {
    alert("${testString}");
}
</script>

我在按钮onclick中使用了testJs()方法

<input type="button"  value="click me " onclick="testJs()" >

这也工作得很好,意味着当我点击按钮是显示我的字符串(Hello World)的值,我的动作类在一个警报。

但是问题是当我在外部(test.js)文件中添加此方法并在jsp文件中添加.js文件时,像这样

<script src="resource/js/test.js" ></script>

警告消息不显示字符串值。show ${testString}

方法testJs()从内部脚本获取和解析字符串值,但不能从外部脚本!!

有什么可能的原因或解释吗?

当您在. JSP文件中编写EL(表达式语言)时,该. JSP文件将由其JSP容器解析,EL将被处理。考虑下面的代码:

anyfile.jsp

<script type="text/javascript">
function testJs() {
    alert("${testString}"); // JSP Container will replace '${testString}' with its value
}
</script>
除了EL之外,

JSP容器没有处理上述任何代码,因此只替换了${testingString}。我的意思是,集装箱不知道<script>function testJs()。JSP容器将只处理扩展名为. JSP(或.jspx或其他文件)的文件。在上面的代码中,javascript位于.jsp文件中。
但是另一方面,当你用-

替换上面的代码时
<script src="resource/js/test.js" ></script>

现在前面的代码在test.js文件中。但是容器怎么会知道呢!您希望JSP容器能够理解这段代码,即理解test.js是通过使用<script>元素和src属性在. JSP文件中添加的javascript。但事实并非如此。
容器实际上不必对这些代码做任何事情。您的代码将发送到客户端没有任何更改。
但是,如果您仍然想使用javascript代码从其他文件中工作,您可以使用以下代码:

anyfile.jsp

<script type="text/javascript">
    <jsp:include page="test.jsp" />
</script>

test.jsp

<%@page contentType="text/javascript" pageEncoding="UTF-8"%>
function go() {
    alert("${testString}");
}