2013-07-29 118 views
0

我試圖在服務器端使用註釋使用ModelDriven方法+驗證。但似乎註釋根本不起作用。我有一個簡單User類名,姓,電子郵件等:Struts 2註釋驗證

@Entity 
@Table(name = "USER") 
@Validation 
public class User { 
    private Long id; 
    private String name; 
    private String gender; 
    private String country; 
    private String aboutYou; 
    private Boolean mailingList; 
    ... 
    @Column(name = "USER_NAME") 
    @RequiredStringValidator(message = "User Name field is empty.") 
    public String getName() { 
     return name; 
    } 

    @Column(name = "USER_GENDER") 
    @RequiredStringValidator(message = "User Gender field is empty.") 
    public String getGender() { 
     return gender; 
    } 
... 
} 

我用@RequiredStringValidator關於性別和名字字段的驗證。 我UserAction類處理請求是:

@Validation 
public class UserAction extends ActionSupport implements ModelDriven<User> { 

    private static final long serialVersionUID = -6659925652584240539L; 

    private User user = new User(); 
    private List<User> userList = new ArrayList<User>(); 
    private UserDAO userDAO = new UserDAOImpl(); 

    @VisitorFieldValidator(message = "", appendPrefix = false) 
    public User getModel() { 
     return user; 
    } 

    /** 

    * To save or update user. 
    * 
    * @return String 
    */ 
    @VisitorFieldValidator(message = "", appendPrefix = false) 
    public String saveOrUpdate() { 
     userDAO.saveOrUpdateUser(user); 
     return SUCCESS; 
    } 

    /** 
    * To list all users. 
    * 
    * @return String 
    */ 
    public String list() { 
     userList = userDAO.listUser(); 
     return SUCCESS; 
    } 

    @VisitorFieldValidator(message = "", appendPrefix = false) 
    public User getUser() { 
     return user; 
    } 

    ... 
} 

我使用@VisitorFieldValidator(message = "", appendPrefix = false),因爲我讀過,這是必要的情況下與ModelDriven方法。

struts.xml是:

<struts> 
    <package name="default" extends="hibernate-default"> 
     <action name="saveOrUpdateUser" method="saveOrUpdate" class="com.tutorials4u.web.UserAction"> 
      <result name="success" type="redirect">listUser</result> 
      <result name="input">/register.jsp</result> 
     </action> 
     <action name="listUser" method="list" class="com.tutorials4u.web.UserAction"> 
      <result name="success">/register.jsp</result> 
      <result name="input">/register.jsp</result> 
     </action> 
</struts> 

,它的需要來定義<result name="input">進行驗證我讀過。 這是我register.jsp其中必須驗證字段的定義:

<s:form action="saveOrUpdateUser" method = "POST" validate="true"> 
    <s:actionerror/> 
    <s:fielderror /> 
    <s:push value="user"> 
     <s:hidden name="id" /> 
     <s:textfield name="name" label="User Name" /> 
     <s:radio name="gender" label="Gender" list="{'Male','Female'}" /> 
     <s:select name="country" list="{'India','USA','UK'}" headerKey="" 
        headerValue="Select" label="Select a country" /> 
     <s:textarea name="aboutYou" label="About You" /> 
     <s:checkbox name="mailingList" 
        label="Would you like to join our mailing list?" /> 
     <s:submit /> 
    </s:push> 
</s:form> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <description>struts2</description> 
    <display-name>struts2</display-name> 
    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class> 
      org.apache.struts2.dispatcher.FilterDispatcher 
     </filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

而問題是,這一切都不起作用。我真的非常感謝任何幫助和任何建議,因爲我仍然對抗這個問題持續了4個小時,我頭腦中唯一的想法告訴我,確認my_own_bicycle而不是使用這種「方便」的驗證解決方案更容易。

回答

0

首先,不推薦使用Validation註釋。

其次,字段名稱應精確映射操作中的對象。因此,push標記是無用的,User對象被modelDriven攔截器全部推送到值棧。

validate="true"通知Struts您正在使用客戶端JavaScript驗證。確保您在JSP中啓用了s:head標記和JavaScript。

+0

我不知道validate =「true」是指客戶端的驗證。我應該寫什麼來在服務器端進行驗證?謝謝。 –

+0

刪除它,它會繼續。 –

+0

我已經刪除它,但它仍然不起作用:-( –