幫忙解決struts2初學(xué)者遇到的一個(gè)問(wèn)題

                  我是一個(gè)初學(xué)者,正在學(xué)Struts2,再練習(xí)課后的一個(gè)題目時(shí)遇到了一個(gè)問(wèn)題,自己調(diào)試也沒(méi)調(diào)出來(lái),所以向請(qǐng)大家?guī)蛡€(gè)忙。     
                  題意如下:
                      設(shè)計(jì)頁(yè)面,輸入學(xué)生信息:學(xué)號(hào)、性別、出生年月、專(zhuān)業(yè)、總學(xué)分等,采用不同的驗(yàn)證方法,確保滿(mǎn)足以下條件:
                    (1)學(xué)號(hào)前兩位大于“09”,并且后面四位必須是數(shù)字;
                    (2)出生年月必須保證年齡大于等于18歲;
                    (3)專(zhuān)業(yè)不能為空;
                    (4)總學(xué)分在0-80分之間。
               我所用的書(shū)里用了兩種校驗(yàn)方法:一種是在Action類(lèi)中進(jìn)行校驗(yàn);另一種是用struts2的框架進(jìn)行校驗(yàn)。我用第一種校驗(yàn)成功了,但第二種校驗(yàn)出錯(cuò)了。

             對(duì)于第二種校驗(yàn)方法,校驗(yàn)學(xué)號(hào)前兩位大于“09”,我的想法是:將頁(yè)面返回的String類(lèi)型的學(xué)號(hào)“id”,轉(zhuǎn)化為一個(gè)擁有“firstTwo”和“lastFour”屬性的類(lèi),然后在struts2的校驗(yàn)框架里使用

          <field name="user.id">
               
          <field-validator type="fieldexpression">
                    
          <param name="expression">
                      
          <![CDATA[(id.firstTwo>9)]]>
                    
          </param> 
                    
          <message>學(xué)號(hào)前兩位必須大于09</message>
                 
          </field-validator>
          </field>
          進(jìn)行校驗(yàn)。
                但運(yùn)行項(xiàng)目時(shí)會(huì)報(bào)這樣的錯(cuò)誤:

             警告: 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;)]


            第一個(gè)界面如下:

                
                 望高手給調(diào)試一下,說(shuō)明錯(cuò)誤的原因,小弟不勝感激!


          整個(gè)小項(xiàng)目的源代碼如下:


           首先是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類(lèi):此類(lèi)在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";
                  }
            
          上一個(gè)類(lèi)中的User類(lèi),此類(lèi)在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類(lèi)中的Id類(lèi)與如下,與User類(lèi)在同一個(gè)包中:
          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;
              }

             
          }

          如下是轉(zhuǎn)換器,它放在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;
              }

            
          }

              
          如下是轉(zhuǎn)換器的配置文件,文件名是:LoginAction-conversion.properties  ,文件與Id在一個(gè)包下,及org.model包中:
          id=org.converter.IdConverter
          如下是 struts的校驗(yàn)文件,它與Action類(lèi)在同一個(gè)包中,即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>學(xué)號(hào)前兩位必須大于09</message>
                
          </field-validator>
             
          </field>


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

          </validators>

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

          評(píng)論

          # re: 幫忙解決struts2初學(xué)者遇到的一個(gè)問(wèn)題 2012-09-12 18:46 清泉..

          調(diào)了幾天終于知道錯(cuò)誤了!原來(lái)是這里出了錯(cuò):
          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(..)方法并不能將字符串?dāng)?shù)組轉(zhuǎn)換為字符串?。?!
          剛開(kāi)始用這個(gè)方法,我也猶豫了一下,并沒(méi)有認(rèn)真地查API,自己想當(dāng)然的認(rèn)為可以,所以就用了。還有一個(gè)錯(cuò)誤是:轉(zhuǎn)換器的配置文件的位置不對(duì)!必須和Action類(lèi)放在同一個(gè)包下,而不是與需要轉(zhuǎn)換的類(lèi)放在同一個(gè)包下!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 安新县| 德化县| 新安县| 岑溪市| 广东省| 泰州市| 芮城县| 永泰县| 徐闻县| 息烽县| 奈曼旗| 安丘市| 和田县| 景泰县| 华坪县| 麦盖提县| 婺源县| 天门市| 莲花县| 永康市| 泽州县| 无极县| 宕昌县| 舞阳县| 桦川县| 武清区| 普定县| 麻城市| 巴林右旗| 时尚| 韶关市| 绥化市| 远安县| 甘德县| 丽水市| 临清市| 贵州省| 普兰县| 巴彦淖尔市| 灵石县| 闻喜县|