幫忙解決struts2初學者遇到的一個問題

                  我是一個初學者,正在學Struts2,再練習課后的一個題目時遇到了一個問題,自己調試也沒調出來,所以向請大家幫個忙。     
                  題意如下:
                      設計頁面,輸入學生信息:學號、性別、出生年月、專業、總學分等,采用不同的驗證方法,確保滿足以下條件:
                    (1)學號前兩位大于“09”,并且后面四位必須是數字;
                    (2)出生年月必須保證年齡大于等于18歲;
                    (3)專業不能為空;
                    (4)總學分在0-80分之間。
               我所用的書里用了兩種校驗方法:一種是在Action類中進行校驗;另一種是用struts2的框架進行校驗。我用第一種校驗成功了,但第二種校驗出錯了。

             對于第二種校驗方法,校驗學號前兩位大于“09”,我的想法是:將頁面返回的String類型的學號“id”,轉化為一個擁有“firstTwo”和“lastFour”屬性的類,然后在struts2的校驗框架里使用

          <field name="user.id">
               
          <field-validator type="fieldexpression">
                    
          <param name="expression">
                      
          <![CDATA[(id.firstTwo>9)]]>
                    
          </param> 
                    
          <message>學號前兩位必須大于09</message>
                 
          </field-validator>
          </field>
          進行校驗。
                但運行項目時會報這樣的錯誤:

             警告: Error setting expression 'user.id' with value '[Ljava.lang.String;@c19fbf'
          ognl.MethodFailedException: Method "setId" failed for object org.model.User@11402c4 [java.lang.NoSuchMethodException: org.model.User.setId([Ljava.lang.String;)]


            第一個界面如下:

                
                 望高手給調試一下,說明錯誤的原因,小弟不勝感激!


          整個小項目的源代碼如下:


           首先是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_3_0.xsd" id="WebApp_ID" version="3.0">  
             
          <display-name>struts</display-name>  
              
          <filter>  
                  
          <filter-name>struts2</filter-name>  
                  
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
                  
              
          </filter>  
              
          <filter-mapping>  
                  
          <filter-name>struts2</filter-name>  
                  
          <url-pattern>/*</url-pattern>  
              </filter-mapping>  
              <welcome-file-list>  
                  <welcome-file>login.jsp</welcome-file>  
              </welcome-file-list>  
          </web-app>  

          其次是struts.xml的配置:
             
          <?xml version="1.0" encoding="UTF-8" ?> 
          <!DOCTYPE struts PUBLIC 
             
          "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
             
          "http://struts.apache.org/dtds/struts-2.3.dtd"> 
          <struts> 
           
            
           
             
          <package name="default" extends="struts-default"> 
                
                 
          <action name="accept" class="org.action.LoginAction"> 
                     
          <result name="success">/welcome.jsp</result> 
                     
          <result name="error">/login.jsp</result>
                 
          </action> 
             
          </package> 
          </struts>

          接著是Action類:此類在src中的org.action包中
          package org.action;
          import org.model.User;

          //import java.util.Calendar;
          import com.opensymphony.xwork2.ActionSupport;
          public class LoginAction extends ActionSupport{
                 
          private User user;
                 
          public User getUser() {
                     
          return user;
                  }

                 
                 
          public void setUser(User user) {
                     
          this.user = user;
                  }

                 
          public String execute(){
                     
                     
          if(hasErrors()){
                         
          return "input";
                      }

                     
                     
          return "success";
                  }
            
          上一個類中的User類,此類在org.model包中

           
          package org.model;
          import java.util.Date;

             

              
          public class User{
                 
          private Id id;
                 
          private String sex;
                 
          private String name;
                 
          private Date bir;
                 
          private String profession;
                 
          private int score;
                 
          public Id getId() {
                     
          return id;
                  }

                 
          public void setId(Id id) {
                     
          this.id = id;
                     
                  }

                 
          public String getSex() {
                     
          return sex;
                  }

                 
          public void setSex(String sex) {
                     
          this.sex = sex;
                  }

                 
          public String getName() {
                     
          return name;
                  }

                 
          public void setName(String name) {
                     
          this.name = name;
                  }

                 
          public Date getBir() {
                     
          return bir;
                  }

                 
          public void setBir(Date bir) {
                     
          this.bir = bir;
                  }

                 
          public String getProfession() {
                     
          return profession;
                  }

                 
          public void setProfession(String profession) {
                     
          this.profession = profession;
                  }

                 
          public int getScore() {
                     
          return score;
                  }

                 
          public void setScore(int core) {
                     
          this.score = core;
                  }

                 
                 
                 
              }

          User類中的Id類與如下,與User類在同一個包中:
          package org.model;

          public class Id{
            
          private int firstTwo;
            
          private String lastFour;
            
          public int getFirstTwo(){
                
          return firstTwo;
             }

            
          public String getLastFour(){
                
          return lastFour;
             }

             
          public void setFirstTwo(int firstTwo) {
                 
          this.firstTwo = firstTwo;
              }

             
          public void setLastFour(String lastFour) {
                 
          this.lastFour = lastFour;
              }

             
          }

          如下是轉換器,它放在org.converter包中:
          package org.converter;
          import java.util.Map;
          import org.model.Id;
          import org.apache.struts2.util.StrutsTypeConverter;
          public class IdConverter extends StrutsTypeConverter {

             
             
          public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
                  Id id
          = new Id();
                  String s
          = String.valueOf(arg1);
                  id.setFirstTwo(Integer.parseInt(s.substring(
          0, 2)));
                  id.setLastFour(s.substring(s.length()
          -4));
                 
          return id;
              }


             
             
          public String convertToString(Map arg0, Object arg1) {
                 
                 
          return null;
              }

            
          }

              
          如下是轉換器的配置文件,文件名是:LoginAction-conversion.properties  ,文件與Id在一個包下,及org.model包中:
          id=org.converter.IdConverter
          如下是 struts的校驗文件,它與Action類在同一個包中,即org.action包:
          <!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="user.id">
              
          <field-validator type="fieldexpression">
                   
          <param name="expression">
                     
          <![CDATA[(id.firstTwo>9)]]>
                   
          </param>
                   
          <message>學號前兩位必須大于09</message>
                
          </field-validator>
             
          </field>


             
          <field name="user.profession">
               
          <field-validator type="requiredstring">
                  
          <param name="trim">true</param>
                  
          <message>專業不能為空!</message>
               
          </field-validator>
             
          </field>
             
          <field name="user.score">
               
          <field-validator type="int">
                 
          <param name="min">0</param>
                 
          <param name="max">80</param>
                 
          <message>學分必須在0-80之間</message>
               
          </field-validator>
             
          </field>

          </validators>

          posted on 2012-09-11 12:57 清泉.. 閱讀(1159) 評論(1)  編輯  收藏

          評論

          # re: 幫忙解決struts2初學者遇到的一個問題 2012-09-12 18:46 清泉..

          調了幾天終于知道錯誤了!原來是這里出了錯:
          public Object convertFromString(Map arg0, String[] arg1, Classarg2) {
          Id id = new Id();

          String s = String.valueOf(arg1);
          id.setFirstTwo(Integer.parseInt(s.substring(0, 2)));
          id.setLastFour(s.substring(s.length()-4));
          return id;
          }
          其中:“String s = String.valueOf(arg1);”,Sring的valueOf(..)方法并不能將字符串數組轉換為字符串!!!
          剛開始用這個方法,我也猶豫了一下,并沒有認真地查API,自己想當然的認為可以,所以就用了。還有一個錯誤是:轉換器的配置文件的位置不對!必須和Action類放在同一個包下,而不是與需要轉換的類放在同一個包下!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 濮阳县| 盈江县| 建水县| 文昌市| 花垣县| 松阳县| 郯城县| 新乐市| 甘洛县| 威信县| 银川市| 方山县| 柳河县| 临漳县| 富蕴县| 龙胜| 嘉黎县| 通海县| 郯城县| 太仆寺旗| 诏安县| 宁强县| 清流县| 张家川| 邻水| 邢台市| 马关县| 闸北区| 长宁县| 万荣县| 吉水县| 独山县| 镶黄旗| 梧州市| 莫力| 清流县| 七台河市| 宜良县| 苍梧县| 岳阳县| 茶陵县|