Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何配置“动态”;输入“;Struts2中的结果_Struts2_Struts Validation - Fatal编程技术网

如何配置“动态”;输入“;Struts2中的结果

如何配置“动态”;输入“;Struts2中的结果,struts2,struts-validation,Struts2,Struts Validation,假设我使用Struts2验证框架将“每个方法”验证配置到我的操作中(在我的示例中,使用注释,但使用xml也是如此)。 假设我的操作中有三个公开的方法: 公共类MyAction扩展了ActionSupport{ @凌驾 公共字符串execute()引发异常{ //这里有一些代码。。。 } @验证( customValidators={@CustomValidator(type=“myCostomValidator”,fieldName=“myFieldName”,shortCircuit=true

假设我使用Struts2验证框架将“每个方法”验证配置到我的操作中(在我的示例中,使用注释,但使用xml也是如此)。 假设我的操作中有三个公开的方法:

公共类MyAction扩展了ActionSupport{
@凌驾
公共字符串execute()引发异常{
//这里有一些代码。。。
}
@验证(
customValidators={@CustomValidator(type=“myCostomValidator”,fieldName=“myFieldName”,shortCircuit=true,message=”“)}
)
公共字符串信息(){
//这里有一些代码。。。
}
@验证(
customValidators={@CustomValidator(type=“myCostomValidator”,fieldName=“anotherFieldName”,shortCircuit=true,message=”“)},
visitorFields={@VisitorFieldValidator(context=“update_context”,fieldName=“anObjectField”,message=”“,shortCircuit=true)}
)
公共字符串更新(){
//这里有一些代码。。。
}
//接球手、二传手和其他。。。
}
现在,三个方法中的每一个都可以被调用,并且具有不同的验证。如果验证失败,框架将设置必须配置到struts.xml中的结果“input”:


result1.jsp
result2.jsp
result3.jsp
如何为每个操作方法提供不同的“输入”结果?例如,如果info()方法的验证失败,我希望访问一个页面;如果update()方法的验证失败,我希望访问另一个页面。
谢谢。

您不必修改返回的结果名称。您正在对操作使用通配符映射,因此也可以将其用于JSP文件名


success.jsp
结果{1}.jsp

我找到了这个解决方案:使用
@InputConfig
注释

使用此注释,可以为验证错误设置“每个方法”结果名称。因此,在struts.xml中,您可以为每个结果名称配置要访问的页面

示例:

@InputConfig(resultName="input_update")
public String update() {
    // perform action
    return SUCCESS;
}
在struts.xml中:
jsp/input\u update.jsp

或:

struts.xml:
jsp/myInput.jsp

请参阅上的文档

也可以通过为“workflow”拦截器设置参数,在struts.xml中设置输入结果名称,但它会影响操作中的所有方法:

<interceptor-ref name="workflow">
    <param name="inputResultName">custom_input_result</param>
</interceptor-ref>

自定义输入结果

请参见此处的文档

结果可以采用OGNL表达式,但是。。。这将把Java端直接绑定到表示层。我的第一个想法是看看是否可以通过OGNL配置默认的工作流拦截器,以返回除
“input”
之外的其他结果名,但我不确定这是否会得到正确的评估,但我仍然会尝试看看会发生什么。我会将其分为三个操作,最终与普通内容共享一个基本操作(准备什么的)。然后每个操作都可以返回自己的输入结果。如果一个操作类中的多个操作方法共享几乎所有内容,则这些操作方法是有意义的,但如果即使是共同的结果也必须不同,那么最好使用不同的操作和单个方法,每个操作都有效!但这有点限制,因为在这种情况下,它不可能可以确保一个操作上的两个不同方法具有相同的“输入”结果页。例如,假设我在同一个操作上有三个方法:search()、create()、update(),如果出现验证错误,我希望search()在test_search.jsp上结束,create()和update()结束每个页面都在同一个页面中结束,例如test_edit.jsp。如何配置struts.xml?@Perelum:最简单的方法是创建两个页面并包含编辑表单。
<interceptor-ref name="workflow">
    <param name="inputResultName">custom_input_result</param>
</interceptor-ref>