講解一下用Struts2接收參數的三種方法。
1.用Action的屬性接收。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TVXVmb1clWt5kMZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TNxUTN1QDNxEDNwgDMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
通路http://localhost:8080/Struts2_0700_ActionAttrParamInput/user!add?name=sss&age=10
通路user action的add 方法傳入name=sss和age=10.
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="user" class="com.tfj.struts2.action.UserAction" >
<result>
/addsuccess.jsp
</result>
</action>
</package>
</struts>
調用com.tfj.struts2.action的UserAction類。
UserAction.java
package com.tfj.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
public String add(){
System.out.println("name="+name);
System.out.println("age="+age);
return SUCCESS;
}
}
通過定義兩個變量,age,name,實作get和set方法,完成調用。輸入的值列印在控制台。
2.用DomainModel接收。
DomainModel是域模型的意思。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="user" class="com.tfj.struts2.action.UserAction">
<result>
/addsuccess.jsp
</result>
</action>
</package>
</struts>
UserAction.java
package com.tfj.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
import com.tfj.struts2.user.User;
public class UserAction extends ActionSupport{
public User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String add(){
System.out.println("name="+user.getName());
System.out.println("age="+user.getAge());
return SUCCESS;
}
}
User.java
package com.tfj.struts2.user;
public class User {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int age;
}
在UserAction隻定義一個user,user的屬性放在User.java裡,user就是一個域模型。在通路中通路http://localhost:8080/Struts2_0800_DomainModelParamInput/user!add?user.name=aaa&user.age=10
用user.name 和user.age來傳遞參數。
不過有的時候需要傳遞的參數并不是user的屬性,例如在網頁注冊的時候,我們經常看到密碼的建立框和密碼的确認框,那麼這個時候,确認框裡的内容并不是user的參數。這個是後我們就要用到DTO,簡單的說先用DTO接受參數,在把需要的參數傳遞給user建立一個user對象。
3.用ModelDriven來接受參數。
雖然ModelDriven并不常用但是它代表了一種MVC的思想還是很有必要了解一下的。
UserAction.java
package com.tfj.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tfj.struts2.user.User;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String add(){
System.out.println("name="+user.getName());
System.out.println("age="+user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
通路http://localhost:8080/Struts2_0900_ModelDrivenParamInput/user!add?name=aaa&age=10
不需要用user.name。在這個類實作了ModelDriven<User>接口,實作getModel()方法,差別是要自己建立一個user對象。過程如下圖。
當需要傳遞中文時候需要在struts.xml配置<constant name="struts.i18n.encoding" value="GBK"> 就可以了。