struts.xml中的操作配置如下所示没有问题:
<action name="customer-form">
<result name="success" type="tiles">/customer.tiles</result>
</action>
当我在动作配置(struts.xml)上访问动作类时出现问题。我在显示表单之前访问该类,因为我希望表单中的下拉选项显示适当的值,因为我在操作类中实例化它。但事实证明,它将返回“输入”,我必须处理它。
行动类中的方法:
public String addCusto(){
custoType = new ArrayList<String>();
custoType.add("ABC");
custoType.add("EFG");
System.out.println(custoType.size());
return SUCCESS;
}
struts.xml中:
<action name="customer-form" class="com.satunol.struts.template.action.CustomerAction" method="addCusto">
<result name="success" type="tiles">/customer.tiles</result>
<result name="input" type="tiles">/customer.tiles</result>
</action>
jsp中表单
<s:form action="savecusto" method="post" validate="true">
<s:select
label="Customer Type"
list="custoType"
emptyOption="true"
headerKey="-1"
headerValue="None"/>
<s:textfield name="custo.name" key="custo.name" size="20" />
<s:textfield name="custo.email" key="email" size="20" />
<s:textfield name="custo.address" key="address" size="20" />
<s:textfield name="custo.phone" key="phone" size="20" />
<s:submit method="addCustomer" key="label.add.customer" align="center" />
结果呢? addCusto
方法未执行,我的表单直接/自动验证,但尚未提交。
我该如何解决这个问题?
答案 0 :(得分:2)
如果您的Action可以返回input
结果,那么您必须在struts.xml配置中处理它。
input
结果,例如当您尝试设置时int
到Date
字段。
当一个Interceptor返回一个结果而不是继续前进到下一个Interceptor(如果它是最后一个,则返回Action)时,将不会执行被调用的Action方法,因为它不会被访问。
仔细检查您的代码和请求,以查看失败的位置并返回input
结果。
P.S:
如果有
我在显示表单之前访问该类,因为我希望表单中的下拉选项显示适当的值,因为我在操作类中实例化它。
你的意思是你需要在执行任何方法之前预填充字段(或者当返回input
结果时),你应该使用prepare()
方法,由之前运行的Prepare Interceptor运行验证拦截器。这样,即使验证失败,您的prepare()
代码也会被执行。