数据转换 示例源码下载
WEB系统都是基于网页形式的,接收到的信息都是字符串,Java又是强类型的语言,所以必须需要一个转换的过程.而Struts2的类型转换是基于OGNL表达式的,只需要将表单中的name属性根据OGNL规则命名就能转换成相应的Java类型,通常情况下哦我们无需建立自己的类型转换器,Struts2的内建转换器完全能帮助我们完成任务
例如我们有下面一个需求(包含Integer,Date,数组的转换)
我们该怎么办呢?不不不~~~~我们什么都不用做正常编写Action就行了,Struts2会自动帮我们进行转换
public class RegisterAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); @Override public User getModel() { return user; } @Override @Action(value = "register", results = { @Result(name = SUCCESS, location = "/success.jsp") }) public String execute() throws Exception { System.out.println(user.toString()); return SUCCESS; } } 
好吧,真的没什么挑战力,下面我们要自己实现转换器了
例如:我们需要将字符串"自行车,1033,100"转换为Java的Product对象
自定义转换器
public class StringToProductTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map context, Object value, Class toType) { if (toType == Product.class) { String[] params = (String[]) value; Product product = new Product(); String[] productValues = params[0].split(","); product.setProductName(productValues[0].trim()); product.setPrice(Float.parseFloat(productValues[1].trim())); product.setCount(Integer.parseInt(productValues[2].trim())); return product; } else if (toType == String.class) { Product product = (Product) value; return product.toString(); } return null; } }配置全局转换器(在WEB-INF\classes目录新建xwork-conversion.properties)
com.jimisun.action.Product=com.jimisun.action.StringToProductTypeConverter在Action中接收(不要使用模型驱动方式接收参数,接收不到)
public class ProductAction extends ActionSupport { private Product product; public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } @Override @Action(value = "register", results = { @Result(name = SUCCESS, location = "/success.jsp") }) public String execute() throws Exception { System.out.println(product.toString()); return SUCCESS; } }
响应数据 示例源码下载
我们一直都没有探讨一个问题,那就是Struts2的结果的响应.对于任何一个程序而言,最重要的莫过于输入和输出,当我们了解了Struts2接收参数后,现在我们一起来看一看Struts2如何响应参数吧
- Servlet API存取值
- 属性值存取值
- 值栈Set方法存取值
- 值栈Push方法存取值
Servlet API存取值
ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST); request.setAttribute("requestValue","requestValue");
