【问题标题】:Struts2 : possible to use dynamic method invocation and specify different validation rules for different methods?Struts2:可以使用动态方法调用并为不同的方法指定不同的验证规则吗?
【发布时间】:2010-04-23 14:27:37
【问题描述】:

我在 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>

然后我的my.Action类有各种方法,可以通过在URL中指定名称来调用,例如:

http://localhost:8080/MyApp/MyAction!method1.action

现在假设firstNamelastName 字段在一个方法中是必需的(例如注册的第一步),而不是在其他方法中。

如果我制作一个像MyAction-validation.xml 这样的通用验证文件,它将使所有方法都需要这些字段。如果我进行了像 MyAction-method1-validation.xml 这样的特定验证,则不会考虑在内。

有解决办法吗?

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

【问题讨论】:

标签: java dynamic struts2 validation


【解决方案1】:

如果您想使用程序化方法进行验证,您可以这样做。这通常使用validate() 方法完成,但是您可以为特定操作方法创建validate 方法,例如validateStep1validateStep2 等。这些将仅验证step1step2 方法。我不确定是否有一个选项可用于将不同的 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>

【讨论】:

  • 感谢 Steven,很高兴知道可以使用不同的验证方法以编程方式验证不同的方法,但我一直在寻找一种使用不同 XML 文件的方法。至于没有通配符的映射,我不怀疑它会起作用,但是动作名称和方法名称之间的分隔符是什么字符?这是一个通用的 struts 配置属性吗?
  • 动态方法调用的默认字符分隔符是感叹号 (!),因此对您来说看起来是一样的。
【解决方案2】:

Struts 2 的 JIRA 中有一个未解决的错误:

https://issues.apache.org/jira/browse/WW-1967

它从 07 年 6 月开始营业,所以我怀疑它永远不会被修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多