<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.
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.
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.
To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or preferable a TypeConversionException.
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;
}
}
原文:http://www.cnblogs.com/java-z/p/3551916.html