我正在使用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值,但无法从外部脚本解析!!!
任何可能的原因或解释。?
如果有人想了解更多信息,请告知我们。
答案 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