在我的 Struts 2 应用程序中,我有一个 JavaScript 函数来执行
cancel()
。此方法位于标头中,仅对我的返回 URL 执行 window.location
。由于我们从 Struts 版本 2.0.11 迁移到 Struts 2.3.8 版本,因此它不再有效。当我查看生成的 HTML 代码时,我发现它无法解释标记 <s:property>
,因为 URL 为空。我看不出有什么不起作用。
在我的 IDE 中:
function cancel() {
if (!isModified || (isModified && askConfirmCancel())) {
window.location.replace('<s:property value="#urlBack"/>');
}
}
Firebug 的结果:
function cancel() {
if (!isModified || (isModified && askConfirmCancel())) {
window.location.replace('');
}
}
在JSP文件中:
<tr>
<td height="6%"align="center">
<s:submit cssClass="button" key="common.initDelegate.label" align="center" theme="simple"/>
<s:url id="urlBack" action="myAction" includeParams="none" escapeAmp="false">
<s:param name="period.periodId" value="%{period.periodId}"></s:param>
</s:url>
<input type="button" onclick="javascript:cancel()" value="<s:text name="common.button.cancel"/>"/>
</td>
</tr>
<s:property value="#urlBack"/>
——在urlBack
之前需要加“#”吗?我们所需要的只是操作类中的 urlBack
属性和 public String getUrlBack()
方法。并且该变量应该在 Action 返回成功/结果之前初始化。
首先您需要创建一个变量
urlBack
,然后将其用于渲染 URL。例如
<s:url var="urlBack" action="myAction" escapeAmp="false">
<s:param name="period.periodId" value="%{period.periodId}"></s:param>
</s:url>
<input type="button" onclick="cancel();" value="<s:text name="common.button.cancel"/>"/>
<script type="text/javascript">
function cancel() {
if (!isModified || (isModified && askConfirmCancel())) {
window.location.replace('<s:property value="#urlBack"/>');
}
}
</script>
还有
includeParams
默认为 none
。id
属性替换为 var
javascript:
是 URL 协议,不适用于 JS 函数,请参阅 this。