`

003 - 接收参数_中文问题

阅读更多

1)接收参数

1. 用属性接受参数给Action

   注意Action里的属性名就尽量与要传递的属性名相同

(注意不是直接给Action中的同名属性直接赋值)

 

   如链接:     <a href="user/user!add?name=a&age=8">添加用户</a>
   它用调UserAction的setName(),和setAge()方法   然后再调add()方法

 

相应在struts.xml中的配置:

   <package name="user" extends="struts-default" namespace="/user">
        <action name="user" class="user.action.UserAction">
                        <result>/user_add_success.jsp</result>
          </action>
</package>
 
 
 

2. 使用DomainModel接受参数给Action.

 

如链接:   <a href="user/user!add?user.name=a&user.age=8"> 

 

这时struts2 会在struts.xml中找到相应的Action(即下面的UserAction),

然后 new UserAction().setUser().setName()

之后再调用Action的add()方法

 

注意一定要把DMI 打开,在struts.xml中加入

<constant name="struts.enable.DynamicMethodInvocation" value="true" /> ,否则会出现下面信息

 

严重: Could not find action or result
There is no Action mapped for namespace /user and action name user!add. - [unknown location]

....

 

 

 

struts.xml的配置同上

//UserAction.java

public class UserAction extends ActionSupport {
 

 private User user;

 public String add() {

  System.out.println("name=" + user.getName());
  System.out.println("age=" + user.getAge());
  return SUCCESS;

}

 public User getUser() {
          return user;
 }

 public void setUser(User user) {
          this.user = user;
 }


}

 
当前台的属性跟DomainModel(即User) 不能完全匹配时,可用DTO来解决
解决办法:
Action中用UserDTO 来接受前台传来的属性,然后再 new User(UserDTO) ,之后可能就是save(User user)
.

3. 用模型驱动来接受参数(ModelDriven)

这时Action应实现ModelDriven
链接写法:<a href="user/user!add?name=a&age=8">添加用户</a>

 
过程: 当前台请求被struts2的filter拦截后,new UserAction().getModel()
把得到的Model(即User)返回给struts2
之后,user().setName() , user().setAge()
这样就把参数接受过来了
 
struts.xml的配置同上
//UserAction.java
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();  //注意要自己new
 
 public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
 }
 @Override
 public User getModel() {
        return user;
 }
}

 

2) 中文问题

在struts.xml中加入   <constant name="struts.i18n.encoding" value="GBK" />  即可

 

struts2.1.16 这样加不行,本身的bug

 

另处,constant 中的常量可以在 struts.core.2.1.18.jar引入包 ->static文件夹 ->default.properties文件中查到

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics