Summary:
在配置struts的action的时候尽量避免用action作为命令模式的那个参数,以免和form的action冲突。如果选择action作为参数的话。 可以通过attribute来获取或修改form的action。
singlePremiumTopupForm.attributes["action"].value='/myAction.do?action=refreshList;
<form name="MyForm" method="post" action="/myAction.do">
<action path="/MyAction" type="cn.choelea.action.MyAction" name="MyForm" scope="session" parameter="action" validate="false"> <forward name="mainSummary" path="/EFormList.do?action=List"/> ....... </action>
我们在用struts的时候,struts是采用的命令模式来寻找Action中的方法的。 所以在struts框架的页面中一般会有以下代码:
<form name="MyForm" method="post" action="/myAction.do">
...................
<input type="submit" name="action" value="Save & Next" class="inputbutton">
<input type="submit" name="action" value="Validate" class="inputbutton">
当我们点击button的时候对应的 键值对 action=Save & Next 或者action=Valiate就会传到服务器。 但有些情况我们需要有javascript 去改变action. 例如有个下拉框我们需要根据选择来刷新页面:
function sub(){
url='/myAction.do?action=refreshList';
MyForm.action=url;
MyForm.submit();
}
此种情况如果有名为action的input对象或者其他对象的话。这个javascript方法sub其实并没有改变form的action。
MyForm.action=url; 会出现js脚本错误,因为这个赋值是对input域赋值, 所以要用MyForm.action.value=url. 和标单提交的action就毫无关系。