天天看點

Struts2 學習筆記07 接收參數的三種方法

  講解一下用Struts2接收參數的三種方法。

  1.用Action的屬性接收。

Struts2 學習筆記07 接收參數的三種方法
Struts2 學習筆記07 接收參數的三種方法

通路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方法,完成調用。輸入的值列印在控制台。

Struts2 學習筆記07 接收參數的三種方法

2.用DomainModel接收。

DomainModel是域模型的意思。

Struts2 學習筆記07 接收參數的三種方法

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對象。

Struts2 學習筆記07 接收參數的三種方法

3.用ModelDriven來接受參數。

雖然ModelDriven并不常用但是它代表了一種MVC的思想還是很有必要了解一下的。

Struts2 學習筆記07 接收參數的三種方法

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對象。過程如下圖。

Struts2 學習筆記07 接收參數的三種方法

當需要傳遞中文時候需要在struts.xml配置<constant name="struts.i18n.encoding" value="GBK"> 就可以了。