Java Struts2:是否可以使用动态方法调用并为不同的方法指定不同的验证规则?

Java Struts2:是否可以使用动态方法调用并为不同的方法指定不同的验证规则?,java,dynamic,struts2,validation,Java,Dynamic,Struts2,Validation,我在struts.xml中有: <action name="MyAction!*" class="my.Action" method="{1}"> <result name="step1">step1.jsp</result> <result name="step2">step2.jsp</result> <result name="error">er

我在struts.xml中有:

    <action name="MyAction!*" class="my.Action" method="{1}">
        <result name="step1">step1.jsp</result>
        <result name="step2">step2.jsp</result>         
        <result name="error">error.jsp</result>
    </action>

现在让我们假设在一种方法(例如注册的第一步)中,
firstName
lastName
字段是强制性的,而在其他方法中不是强制性的

如果我创建一个通用的验证文件,如
MyAction validation.xml
,它将生成所有方法所需的字段。如果我做了一个特定的验证,比如
MyAction-method1-validation.xml
,则不会考虑它

有解决办法吗


否则,我将不得不在struts.xml中为每个方法映射不同的操作,而不是使用动态方法调用,或者手动执行验证。

如果要使用编程方法进行验证,可以这样做。这通常是通过
validate()
方法完成的,但是您可以为特定操作方法创建
validate
方法,例如
validatesp1
validatesp2
等。这些方法将仅验证
step1
step2
方法。我不确定是否有一个选项可用于为不同的方法使用不同的XML文件

此外,您不需要在操作中使用通配符映射来使用动态方法调用。只要用这个:

<action name="MyAction" class="my.Action">
    <result name="step1">step1.jsp</result>
    <result name="step2">step2.jsp</result>         
    <result name="error">error.jsp</result>
</action>

step1.jsp
step2.jsp
error.jsp

Struts 2的JIRA中存在一个开放性缺陷:


它从2007年6月开始开放,所以我怀疑它是否会被修复。

事实上,这似乎是Struts2会议上的一个公开问题。JIRA:谢谢Steven,很高兴知道有不同的验证方法可以通过编程验证不同的方法,但我特别想找到一种使用不同XML文件的方法。至于没有通配符的映射,我毫不怀疑它会起作用,但是动作名和方法名之间的分隔符是什么?这是一个常规struts配置属性吗?动态方法调用的默认字符分隔符是一个感叹号(!),因此对您来说它看起来是一样的。