假设我使用Struts2验证框架在我的操作中配置了“per method”验证(在我的带有注释的示例中,但是与xml相同)。 假设我的行动中有三个公开的方法:
public class MyAction extends ActionSupport {
@Override
public String execute() throws Exception {
//some code here...
}
@Validations(
customValidators = {@CustomValidator(type="myCostomValidator", fieldName="myFieldName", shortCircuit=true, message="")}
)
public String info() {
//some code here...
}
@Validations(
customValidators = {@CustomValidator(type="myCostomValidator", fieldName="anotherFieldName", shortCircuit=true, message="")},
visitorFields = {@VisitorFieldValidator(context="update_context", fieldName="anObjectField", message="", shortCircuit=true)}
)
public String update() {
//some code here...
}
//getters, setters and other...
}
现在,可以调用这三种方法中的每一种,并进行不同的验证。如果验证失败,框架会将结果“input”设置为struts.xml:
<action name="myAction_*" method="{1}" class="com.test.gui.action.test.MyAction">
<result name="success">result1.jsp</result>
<result name="edit">result2.jsp</result>
<result name="input">result3.jsp</result>
</action>
如何为每种操作方法提供不同的“输入”结果?例如,如果对于info()方法的验证失败,我想要访问一个页面,如果update()方法的验证失败,我想要访问另一个页面。 谢谢。
答案 0 :(得分:2)
我找到了这个解决方案:使用@InputConfig
注释。
使用此注释,您可以为验证错误设置“每个方法”结果名称。因此,在struts.xml中,您可以为每个结果名称配置要访问的页面。
示例:
@InputConfig(resultName="input_update")
public String update() {
// perform action
return SUCCESS;
}
并在struts.xml中:<result name="input_update">jsp/input_update.jsp</result>
或:
@InputConfig(methodName="inputMethod")
public String update() {
// perform action
return SUCCESS;
}
public String inputMethod() {
// perform some data filling
return INPUT;
}
struts.xml:<result name="input">jsp/myInput.jsp</result>
请参阅struts.apache.org/docs/inputconfig-annotation.html
上的文档也可以通过设置'workflow'拦截器的参数来设置struts.xml中的输入结果名称,但它会影响操作中的所有方法:
<interceptor-ref name="workflow">
<param name="inputResultName">custom_input_result</param>
</interceptor-ref>
请参阅此处的文档struts.apache.org/docs/default-workflow-interceptor.html
答案 1 :(得分:0)
您不必修改返回的结果名称。您正在为您的操作使用通配符映射,因此也将它用于JSP文件名。
<action name="myAction_*" method="{1}" class="com.test.gui.action.test.MyAction">
<result name="success">success.jsp</result>
<result name="input">result_{1}.jsp</result>
</action>