Struts 2验证不起作用

时间:2014-06-20 14:57:27

标签: validation struts2

我正在尝试使用struts 2自定义验证框架进行验证,但这似乎不起作用。我正在研究一个非常大的项目和我正在研究的模块,我正在尝试实现它。

问题struts 2没有检测到我的validation.xml。我尝试创建一个示例项目并使用此validation.xml并且它正在运行,但同样在项目中不起作用。

我正在使用模型驱动,我希望不应该是问题。 行动支持提供的基本验证工作正常但不是我的验证。

<interceptors>
    <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" />
    <interceptor name="browserCachingInterceptor" class="com.comviva.im.ui.interceptor.BrowserCachingInterceptor" />
    <interceptor name="sessionHijackInterceptor" class="com.comviva.im.ui.interceptor.SessionHijackInterceptor" />
    <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />
    <interceptor-stack name="defaultSecurityStack">
        <interceptor-ref name="defaultStack">
            <param name="exception.logEnabled">true</param>
            <param name="exception.logLevel">DEBUG</param>
        </interceptor-ref>
        <interceptor-ref name="tokenSession">
            <param name="excludeMethods">*</param>
        </interceptor-ref>

        <interceptor-ref name="sessionHijackInterceptor" />
        <interceptor-ref name="browserCachingInterceptor" />
    </interceptor-stack>
</interceptors>

<default-interceptor-ref name="defaultSecurityStack"></default-interceptor-ref>

拦截器声明也没问题。 我试了好几天但仍然无法弄清楚问题。剩下的唯一选择是调试。 任何人都可以建议我在哪里寻找。在validation.xml中加载了ActionInvocation文件,以便检查验证文件是否正确加载。

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
  <field name="nodeId">
      <field-validator type="required">
          <message key="errors.required"/>
      </field-validator>
      <field-validator type="int">
          <param name="min">1</param>
          <param name="max">10000</param>
          <message>bar must be between ${min} and ${max}, current value is ${bar}.</message>
      </field-validator>
  </field>
  <field name="selfISDNNumber">
        <field-validator type="required">
          <message key="errors.required"/>
      </field-validator>
  </field>

</validators>

这是我的动作类的摘录:

public class NodeAction extends BaseAction implements ModelDriven<NodeConfigurationForm>, ParameterAware ,Preparable {

    NodeConfigurationForm nodeConfigForm = new NodeConfigurationForm();
    private static final Logger logger = Logger.getLogger(NodeAction.class);
    private NodeConfigurationService configurationService;

    private List<NodeConfiguration> nodeListTable = null;
    Map<String , String[]>  requestParams;
    private int isFallBackChannelEnable;
    private int smsSupportEnable;
    private ServletContext servletContext;

我的NodeAction类扩展了BaseAction,它扩展了ActionSupport,默认情况下是验证感知。所以NodeAction也应该使用自定义验证。 这是我的struts.xml中有关操作的摘录:

<action name="createGWNode" method="create" class="com.comviva.im.ui.ussdGateway.action.NodeAction">
    <result name="success" type="tiles">createGWNode</result>
</action>

<action name="addGWNode" method="add" class="com.comviva.im.ui.ussdGateway.action.NodeAction">
    <result name="success" type="chain">listGWNodes</result>
    <result name="input" type="tiles">createGWNode</result>
    <result name="error" type="tiles">createGWNode</result>
</action>

<action name="editGWNode" method="edit" class="com.comviva.im.ui.ussdGateway.action.NodeAction">
    <result name="success" type="tiles">createGWNode</result>
</action>

<action name="updateGWNode" method="update" class="com.comviva.im.ui.ussdGateway.action.NodeAction">
    <result name="success" type="redirect">listGWNodes</result>
    <result name="input" type="tiles">createGWNode</result>
    <result name="error" type="tiles">createGWNode</result>
</action>

这是我的jsp

<s:textfield name="nodeId" required="true" theme="simple" />reado
<s:radio name="status" list="#{'1':'Enable','0':'Disable'}" theme="simple"></s:radio>
<s:textfield name="gwInstanceName" theme="simple" />
<s:textarea name="description" cols="30" rows="2" theme="simple"/>

<s:textfield name="serverIp" theme="simple"/>
<s:textfield name="serverIp" theme="simple" readonly=< s:textfield name="loginUserId" theme="simple"/>
<s:password name="loginPassword" showPassword="true" theme="simple"/>
<s:textfield name=" selfISDNNumber " theme="simple "/>
<s:select name="logLevel " list="logLevelList " theme="simple "/>

2 个答案:

答案 0 :(得分:0)

注意:请从selfISDN_num

中删除_下划线

检查正确的jar文件。

Xwork:Core 2.3.16.2 API

并检查getter,setters

注意:请检查struts.xml中的包名称,是否延长struts-default

<package name="Registration" namespace="/" extends="struts-default">
... 
</package>

答案 1 :(得分:0)

终于发现了什么问题。 validation.xml中指定的DTD是错误的。指定的DTD适用于2.3以上版本。我使用的是较低版本的struts。 我现在正在使用

 <!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">