String username= requst.getParameter("username");
//获取年龄然后转换成了整数
int age=Integer.parseInt(requst.getParameter("age"));
TypeConverter
接口,但是这个接口太复杂了,因此OGNL还提供了一个类DefaultTypeConverter
,通过继承这个类就可以实现类型转换器了。<form action="http://localhost:8080/web3/login" method="post">
<label>请输入用户名和密码(逗号隔开):</label>
<input type="text" name="user">
<input type="submit" value="提交">
</form>
public class User {
private String username; //用户名
private String password; //密码
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
import com.opensymphony.xwork2.Action;
import com.user.User;
public class LoginAction implements Action {
private User user; // User对象
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
return SUCCESS;
}
}
import java.util.Map;
import com.user.User;
import ognl.DefaultTypeConverter;
public class UserConverter extends DefaultTypeConverter {
/*
* context:类型转换的上下文环境
* value: value是需要转换的参数,随着转换的方向不同,value的参数值也是不一样的,因此需要强制转化
* toType: 表示转换后的目标类型
*/
public Object convertValue(Map context, Object value, Class toType) {
System.err.println("调用了");
// 有字符串转http://download.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#sum换为User类
// toType表示转向的类型
if (toType == User.class) {
String[] params = (String[]) value; // 将字符串转换为数组
User user = new User(); // 创建User对象
// 利用逗号将数组中的第一个字符串分割为两个字符串,设置成username,password
user.setUsername(params[0].split(",")[0]);
user.setPassword(params[0].split(",")[1]);
return user; // 最后一定要返回User对象
}
// 如果是从复合类转换为字符串
else if (toType == String.class) {
User user = (User) value; // 将value转换为User对象
// 最后返回一个字符串表现的形式
return user.getUsername() + "," + user.getPassword();
} else {
return null; // 没有相互转换的条件返回null
}
}
}
user=com.converter.UserConverter
com.user.User=com.converter.UserConverter
com.date.Date=com.converter.Date
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.user.User;
public class UserConverterStruts extends StrutsTypeConverter {
protected Object performFallbackConversion(Map context, Object o,
Class toClass) {
return super.performFallbackConversion(context, o, toClass);
}
// 将字符串转换为复合类型的方法
public Object convertFromString(Map context, String[] values, Class toClass) {
User user = new User(); //创建User对象
String[] userValues = values[0].split(","); // 将字符串数组中的第一个字符串分隔开
user.setUsername(userValues[0]);
user.setPassword(userValues[1]);
return user;
}
// 将复合类型转换为字符串
public String convertToString(Map context, Object values) {
User user = (User) values; //强制转换成User类型的
String username = user.getUsername(); //获取username和password
String password = user.getPassword();
return "<" + username + "," + password + ">";
}
}
<form action="http://localhost:8080/web3/login" method="post">
<label>请输入用户名和密码(逗号隔开):</label>
<input type="text" name="users">
<input type="text" name="users">
<input type="submit" value="提交">
</form>
import com.opensymphony.xwork2.Action;
import com.user.User;
public class LoginSAction implements Action {
private User[] users; //定义数组类型User
public User[] getUsers() {
return users;
}
public void setUsers(User[] users) {
this.users = users;
}
public String execute() throws Exception {
System.out.println(getUsers()[0].getUsername());
return SUCCESS;
}
}
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.user.User;
public class UsersConverterStruts extends StrutsTypeConverter {
// 将字符串转换复合类型
public Object convertFromString(Map context, String[] values, Class toClass) {
if (values.length > 1) {
User[] results= new User[values.length]; // 创建对象,这里是创建和字符串数组一样的长度
// 遍历所有的字符串数组,然后将其填入每一个User对象中
for (int i = 0; i < values.length; i++) {
User user=new User(); //创建user对象
String[] uservalues = values[i].split(",");
user.setUsername(uservalues[0]); // 将其设置为User的属性
user.setPassword(uservalues[1]);
results[i]=user; //将实例化的user对象,填入数组
}
return results;
} else { // 这里表示数组中只有一个字符串
User user = new User(); // 创建对象
String[] uservalues = values[0].split(",");
user.setUsername(uservalues[0]);
user.setPassword(uservalues[1]);
return user;
}
}
// 将复合类型转换为字符串
public String convertToString(Map context, Object values) {
// 只是一个单个的User类型的
if (values instanceof User) {
User user = (User) values;
String username = user.getUsername();
String password = user.getPassword();
return "<" + username + "," + password + ">";
}
// User数组
else if (values instanceof User[]) {
User[] users = (User[]) values; //转换为User数组
String results = "[";
for (User user : users) {
String username = user.getUsername();
String password = user.getPassword();
results += "<" + username + "," + password + ">";
}
return results + "]"; //返回全部的字符串
} else {
return "";
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。