Struts2 <s:param>標簽示例
Struts2 <s:param>標簽被用來參數化其他標簽。 但是,當稱明<s:param>標簽,“參數值”可以有兩種定義方式:
- “value” 屬性
-
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
在瀏覽中打上麵的網址,訪問後顯示結果如下:
參考