2010-04-15 41 views
1

我的問題是,當我沒有看到客戶端驗證錯誤消息時,即使在配置時沒有爲該字段輸入任何值按要求。頁面重新加載並轉到結果頁面,客戶端驗證失敗。我不確定我做錯了什麼。使用Struts 2進行客戶端驗證的問題。基於Xml的驗證規則不被識別

我有一個簡單的形式,我有一個名爲選擇標準的下拉菜單。必須選擇一個值。如果未選擇某個值,則應使用已配置的錯誤消息重新加載頁面。我在下面輸入表格action_item_search.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> 

我有爆炸的戰爭文件的我的WEB-INF/classes目錄下添加validators.xml,如下所示:

<!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-

<!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> 

我的支柱映射XML:

在WEB-INF/classes目錄的validation.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(); 
} 
} 
+0

我有類似的問題。我正在使用Validateable接口,並且在我提交表單時工作正常。但是我發現在s:form的標籤中沒有設置validate ='true'的區別。在我看來,如果客戶端驗證JavaScript代碼沒有成功生成。 – Akku 2011-06-15 12:49:45

+0

我不確定什麼可能是實際問題,但請參閱此鏈接http://struts.apache.org/2.0.6/docs/client-side-validation.html,它可能有幫助 – Binay 2012-10-15 11:00:28

回答

0

我時,我沒有自己的計算機上的網絡連接同樣的問題。

一旦與我的開發機器建立了互聯網連接,我就重新編譯並運行應用程序和驗證工作。看起來像validators.xml需要互聯網。

+0

我仍然可以重現這個問題沒有或沒有互聯網連接。 – Kartik 2010-04-29 01:52:49

0

您必須在您的jsp中包含<s:head/>標記。其他明智的客戶端驗證不適用於struts2x。默認情況下,它不會顯示任何警報框。您必須使用由HTML生成的函數名稱覆蓋的onSubmit=<true/false>。您可以通過在瀏覽器中查看生成表單的源代碼來檢查函數的名稱。希望這會幫助你。