幫忙解決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>
題意如下:
設(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)框架里使用









但運(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的配置:

















其次是struts.xml的配置:

















接著是Action類(lèi):此類(lèi)在src中的org.action包中






















上一個(gè)類(lèi)中的User類(lèi),此類(lèi)在org.model包中

































































































如下是轉(zhuǎn)換器的配置文件,文件名是:LoginAction-conversion.properties ,文件與Id在一個(gè)包下,及org.model包中:





























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