<form action
=
"userAction.action"
>
<
!
-- 以
;分割
--
>
USER
:
<input id
=
"user" name
=
"user"
/
>
<BR
/
>
<input type
=
"submit" value
=
"submit"
/
>
<
/form
>
<action name
=
"userAction"
class
=
"discovery.struts2.login.UserAction"
>
<result name
=
"success"
>
/webs2
/userInfo.jsp
<
/result
>
<
/action
>
# UserAction中須要類型轉換的屬性=類型轉換器
# 說明須要對UserAction的user屬性使用該類型轉換器進行轉換
user
=discovery.struts2.coverter.UserCoverter
package discovery.struts2.coverter;
import java.util.Map;
import java.util.StringTokenizer;
import ognl.DefaultTypeConverter;
import discovery.struts2.login.bean.User;
/**
* 類型轉換器
*/
public
class UserCoverter
extends DefaultTypeConverter {
/**
* 類型轉換:
* 將頁面字符串轉換爲後臺對象
* 將後臺對象轉換爲頁面字符串
*/
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(User.
class
== toType){
System.out.println(
"將頁面字符串轉換爲後臺對象");
String[] str
= (String[])value;
String firstValue
= str[
0];
StringTokenizer st
=
new StringTokenizer(firstValue,
";");
String username
= st.nextToken();
String password
= st.nextToken();
User user
=
new User();
user.setPassword(password);
user.setUsername(username);
return user;
}
else
if(String.
class
== toType){
System.out.println(
"將後臺對象轉換爲頁面字符串");
User user
= (User)value;
String username
= user.getUsername();
String password
= user.getPassword();
String userInfo
=
"username: "
+ username
+
", password: "
+ password;
return userInfo;
}
return null;
}
}
package discovery.struts2.login;
import com.opensymphony.xwork2.ActionSupport;
import discovery.struts2.login.bean.User;
public
class UserAction
extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public
void setUser(User user) {
this.user
= user;
}
@Override
public String execute()
throws Exception {
System.out.println(user.getUsername());
System.out.println(user.getPassword());
return SUCCESS;
}
}
Base class for type converters used in Struts. This class provides two abstract methods that are used to convert both to and from strings -- the critical functionality that is core to Struts's type coversion system. html
Type converters do not have to use this class. It is merely a helper base class, although it is recommended that you use this class as it provides the common type conversion contract required for all web-based type conversion. java
There's a hook (fall back method) called performFallbackConversion
of which could be used to perform some fallback conversion if convertValue
method of this failed. By default it just ask its super class (Ognl's DefaultTypeConverter) to do the conversion. web
To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or preferable a TypeConversionException. apache
package discovery.struts2.coverter;
import java.util.Map;
import java.util.StringTokenizer;
import org.apache.struts2.util.StrutsTypeConverter;
import discovery.struts2.login.bean.User;
public
class UserStruts2Coverter
extends
StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
System.out.println(
"convertFromString將頁面字符串轉換爲後臺對象");
String firstValue
= values[
0];
StringTokenizer st
=
new StringTokenizer(firstValue,
";");
String username
= st.nextToken();
String password
= st.nextToken();
User user
=
new User();
user.setPassword(password);
user.setUsername(username);
return user;
}
@Override
public String convertToString(Map context, Object o) {
System.out.println(
"convertToString將後臺對象轉換爲頁面字符串");
User user
= (User)o;
String username
= user.getUsername();
String password
= user.getPassword();
String userInfo
=
"username: "
+ username
+
", password: "
+ password;
return userInfo;
}
}
# UserAction中須要類型轉換的屬性=類型轉換器
# user=discovery.struts2.coverter.UserCoverter
user=discovery.struts2.coverter.UserStruts2Coverter
package
org.apache.struts2.util;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public
abstract
class StrutsTypeConverter
extends DefaultTypeConverter {
public Object convertValue(Map context, Object o, Class toClass) {
if (
toClass.equals(String.class)) {
return convertToString(context, o);
}
else
if (
o instanceof String[]) {
return convertFromString(context, (String[]) o, toClass);
}
else
if (
o instanceof String) {
return convertFromString(context,
new String[]{(String) o}, toClass);
}
else {
return performFallbackConversion(context, o, toClass);
}
}
/**
* Hook to perform a fallback conversion if every default options failed. By default
* this will ask Ognl's DefaultTypeConverter (of which this class extends) to
* perform the conversion.
*/
protected Object performFallbackConversion(Map context, Object o, Class toClass) {
return
super.convertValue(context, o, toClass);
}
/**
* Converts one or more String values to the specified class.
*/
public
abstract Object convertFromString(Map context, String[] values, Class toClass);
/**
* Converts the specified object to a String.
*/
public
abstract String convertToString(Map context, Object o);
}
package discovery.struts2.login;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import discovery.struts2.login.bean.User;
public
class
UserListAction
extends ActionSupport {
private List
<User
> user;
public List
<User
> getUser() {
return user;
}
public
void setUser(List
<User
> user) {
this.user
= user;
}
@Override
public String execute()
throws Exception {
for(User u
:user){
System.out.println(u.getUsername());
}
return SUCCESS;
}
}