无法从外部javaScript访问Struts Action属性

时间:2014-08-07 09:59:36

标签: java javascript jsp struts2

我正在使用struts2开发一个项目。在我的Action类中,我有一个带有setter / getter的String testString,我可以访问它   从我的jsp文件使用${testString}。工作正常。

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

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

我在按钮testJs()

中使用了onclick方法
<input type="button"  value="click me " onclick="testJs()" >

这也可以正常工作,意味着当我点击按钮时会在警报中向我显示我的Action类的字符串(Hello World)的值。

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

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

警报消息不显示字符串值。它只显示${testString}

方法testJs()从内部脚本获取并解析String值,但无法从外部脚本解析!!!

任何可能的原因或解释。?

如果有人想了解更多信息,请告知我们。

1 个答案:

答案 0 :(得分:0)

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

anyfile.jsp

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

JSP容器未处理上述任何代码(EL除外),因此仅替换${testingString}。我的意思是,容器不了解<script>function testJs()。 JSP容器只处理带有.jsp(或.jspx或其他一些文件)扩展名的文件。在上面的代码中,您的javascript位于.jsp文件中。
但另一方面,当你用上面的代码替换上面的代码 -

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

现在前面的代码在test.js文件中。但容器如何知道这一点! 您希望JSP容器能够理解此代码,即通过使用test.js元素和<script>属性了解{。{1}}是否已在.jsp文件中添加为javascript。但它没有 容器实际上不需要对此代码执行任何操作。并且您的代码将被发送到客户端而不做任何更改。
但是,如果您仍想使用您的javascript代码从其他文件工作,您可以使用以下代码:

src

anyfile.jsp

并且

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

test.jsp