代码之家  ›  专栏  ›  技术社区  ›  Kartik

使用Struts2进行客户端验证时遇到问题。无法识别基于Xml的验证规则

  •  1
  • Kartik  · 技术社区  · 15 年前

    我的问题是,当我没有看到客户端验证错误消息时,当我没有为该字段输入任何值时,即使它是按要求配置的。页面被重新加载并转到结果页面,客户端验证失败。我不确定我做错了什么。

    我有一个简单的表单,其中有一个下拉菜单,叫做选择标准。必须选择一个值。如果未选择某个值,则页面应重新加载配置的错误消息。我的输入表单操作\u项_搜索.jsp如下所示:

    <%@ taglib prefix="s" uri="/struts-tags" %>
        <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
            pageEncoding="ISO-8859-1"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Action Item Search</title>
        </head>
        <body>
        <s:actionerror/>
        <s:fielderror />
        <s:form action="action_item_search" validate="true">
          <s:select label="Search Criterion" name="searchCriterion"
              list="#{'': 'Select One', 'creatorName':'creator name', 
               assignedTo':'assigned to'}" required="true" />             
          <s:submit name="search" value="Search"></s:submit>
        </s:form>
        </body>
    

    <!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
     <validators>
    <validator name="required"   
            class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" 
            class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" 
            class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" 
            class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" 
            class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" 
           class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date"  
           class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" 
           class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" 
           class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" 
           class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url"            
           class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor"           
           class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" 
       class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" 
          class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex"  
          class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" 
    class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    </validators>
    

    ActionItemTrackingAction findByCriteria标准-验证.xmlWEB-INF/classes目录如下:

    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    
    <validators>
    <field name="searchCriterion" >
      <field-validator type="required">
         <message>You must enter a search criterion.</message>
      </field-validator>
     </field>
    </validators>
    

    我的struts映射xml:

    <struts>
    
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    
    <!-- <include file="example.xml"/> -->
     <package name="action-item" extends="struts-default">
          <action name = "action_item_search_input">
          <result name = "success">/action-item-search.jsp</result>
        </action>
        <action name="action_item_search" class="gov.nasa.spacebook.ActionItemTrackingAction" method="fetchByCriteria">
           <result name = "success">/action-item-result.jsp</result>
           <result name = "input">/action-item-search.jsp</result>
           <result name = "error">/action-item-search.jsp</result>
        </action>
     </package>
     </struts>
    

    我的动作课

    public class ActionItemTrackingAction extends ActionSupport {
       private List<ActionItem> actionItems;
       public List<ActionItemTracking> getActionItems() {
      return actionItems;
       }
       public void setActionItems(List<ActionItemTracking> actionItems) {
      this.actionItems = actionItems;
       }
    
       private String searchCriterion;
       public String getSearchCriterion() {
        return searchCriterion;
    }
    public void setSearchCriterion(final String criterion) {
        this.searchCriterion = criterion;
    }
    
        public String fetchByCriteria() throws Exception {
            final ActionItemTrackingService service = 
            new ActionItemTrackingService();
        this.actionItems = service.getByField(this.actionItem);
        return super.execute();
    }
    }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Iceman    15 年前

    当我的开发机器上没有internet连接时,我也会遇到同样的问题。

    一旦建立了到我的开发机器的internet连接,我就重新编译并运行应用程序和验证工作。好像是验证器.xml需要互联网。

        2
  •  0
  •   Praveen Reddy    12 年前

    你一定要进去 <s:head/> 在jsp中添加标记。struts2x无法进行其他明智的客户端验证。默认情况下,它不会显示任何警报框。你必须使用 onSubmit=<true/false> 按HTML生成的函数名折叠。您可以通过在浏览器中查看生成表单的源代码来检查函数名。希望这对你有帮助。