位置:首頁 > Java技術 > Struts2教學 > Struts2 <s:param>標簽示例

Struts2 <s:param>標簽示例

Struts2 <s:param>標簽被用來參數化其他標簽。 但是,當稱明<s:param>標簽,“參數值”可以有兩種定義方式:


  1. “value” 屬性
  2. param標簽的開始和結束之間的文本
例如,
<param name="fruit">Banana</param>  {Case 1}
<param name="fruit" value="Banana"/> {Case 2} 
在Struts2中,都是表現一個完全不同的意義。 在“Case 1”中, 值被認為是一個java.lang.String對象; 而在“Case 2”中, 值被認為是一個 java.lang.Object 對象。
上述聲明用一些例子很好地說明:

示例1

通過“param”標簽設置“字符串”值轉換到 bean屬性,必須這樣聲明
<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="nickName">yiibai</s:param>
</s:bean>
而不是
<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="nickName" value="yiibai"></s:param>
</s:bean>
如果你聲明“字符串”的值在“value”屬性中,Struts2 會忽略它。

示例2

通過<s:param>標簽設置 java.lang.Object 對象轉換成 bean 屬性,這樣聲明
<s:bean name="com.gitbook.netmon.Fruit" var="fruitBean">
	<s:param name="fruitName">Banana</s:param>
</s:bean>

<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="favorFruit" value="#fruitBean"></s:param>
</s:bean>

示例3

對於基本類型,可以自由地在任何位置聲明它。
<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="age" value="99"></s:param>
</s:bean>
// or
<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="age">99</s:param>
</s:bean> 
<s:param>標簽不僅是可用於bean標簽,它幾乎適用於所有需要參數化的標簽。
在Struts 2,<s:param>標簽是一個非常混亂的標簽,許多新的Struts2開發人員都可能會掉進這個陷阱,但不知道為什麼一個簡單的“字符串”的setter方法是不行的。希望 Struts2 的團隊能夠在今後設計更加人性化的標簽。

Struts2 <s:param>標簽示例

一個完整的Struts2 <s:param>標簽的例子。

1. 動作

Action類轉發請求。

ParamTagAction.java

package com.gitbook.netmon.action;

import com.opensymphony.xwork2.ActionSupport;
 
public class ParamTagAction extends ActionSupport{
	
	public String execute() {
		return SUCCESS;
	}
	
}

2. Bean

兩個Bean對象初始化在“param”標簽之後。

Person.java

package com.gitbook.netmon;

public class Person{
	
	private String nickName;
	private int age;
	private Fruit favorFruit;
	
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Fruit getFavorFruit() {
		return favorFruit;
	}
	public void setFavorFruit(Fruit favorFruit) {
		this.favorFruit = favorFruit;
	}
	
	public String getFruitName(){
		return this.favorFruit.getFruitName();
	}
	
}

Fruit.java

package com.gitbook.netmon;

public class Fruit{
	
	private String fruitName;

	public String getFruitName() {
		return fruitName;
	}

	public void setFruitName(String fruitName) {
		this.fruitName = fruitName;
	}
	
}

3. <s:param>標簽示例

JSP頁麵顯示如何使用<s:param>標簽。

param.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
 <html>
<head>
</head>
 
<body>
<h1>Struts 2 param tag example</h1>

<s:bean name="com.gitbook.netmon.Fruit" var="fruitBean">
	<s:param name="fruitName">Banana</s:param>
</s:bean>

<s:bean name="com.gitbook.netmon.Person" var="personBean">
	<s:param name="nickName">ah pig ah dog</s:param>
	<s:param name="age">99</s:param>
	<s:param name="favorFruit" value="#fruitBean"></s:param>
</s:bean>

<h2>PersonBean</h2>
<ol>
<li>NickName property : <s:property value="#personBean.nickName" /></li>
<li>Age property : <s:property value="#personBean.age" /></li>
<li>Fruit property : <s:property value="#personBean.fruitName" /></li>
</ol>
</body>
</html>

4. struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 	<constant name="struts.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">
	
		<action name="paramTagAction" 
			class="com.gitbook.netmon.action.ParamTagAction" >
			<result name="success">pages/param.jsp</result>
		</action>
		
	</package>
</struts>

5. 示例

http://localhost:8080/struts2paramtag/paramTagAction.action

在瀏覽中打上麵的網址,訪問後顯示結果如下:

參考

  1. Struts2 <s:param>標簽文檔