首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Struts进行客户端验证时出现问题2.无法识别基于Xml的验证规则

使用Struts进行客户端验证时出现问题2.无法识别基于Xml的验证规则
EN

Stack Overflow用户
提问于 2010-04-16 01:30:14
回答 2查看 3.1K关注 0票数 1

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

我有一个简单的表单,其中有一个名为selection criterion的下拉菜单。必须选择一个值。如果未选择某个值,则页面应重新加载并显示配置的错误消息。我的输入表单action_item_search.jsp如下所示:

代码语言:javascript
运行
复制
<%@ 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>

我已经在我的WEB-INF/ validators.xml目录中添加了WEB-INF/classes,如下所示:

代码语言:javascript
运行
复制
<!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>

WEB-INF/ ActionItemTrackingAction-findByCriteria-validation.xml目录下的类如下:

代码语言:javascript
运行
复制
<!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:

代码语言:javascript
运行
复制
<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>

我的action类

代码语言:javascript
运行
复制
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();
}
}
EN

Stack Overflow用户

发布于 2013-03-05 13:37:34

您必须在您的jsp中包含<s:head/>标记。其他情况下,使用struts2x不能进行客户端验证。默认情况下,它不会显示任何警告框。您必须使用由HTML生成的函数名所遵循的onSubmit=<true/false>。您可以通过在浏览器中查看生成的表单的源代码来检查函数的名称。希望这能对你有所帮助。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2647594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档