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.xuhuhu.common.Person" var="personBean"> <s:param name="nickName">zaixian</s:param> </s:bean>
而不是
<s:bean name="com.xuhuhu.common.Person" var="personBean"> <s:param name="nickName" value="zaixian"></s:param> </s:bean>
如果你声明“字符串”的值在“value”属性中,Struts2 会忽略它。
示例2
通过<s:param>标签设置 java.lang.Object 对象转换成 bean 属性,这样声明
<s:bean name="com.xuhuhu.common.Fruit" var="fruitBean"> <s:param name="fruitName">Banana</s:param> </s:bean> <s:bean name="com.xuhuhu.common.Person" var="personBean"> <s:param name="favorFruit" value="#fruitBean"></s:param> </s:bean>
示例3
对于基本类型,可以自由地在任何位置声明它。
<s:bean name="com.xuhuhu.common.Person" var="personBean"> <s:param name="age" value="99"></s:param> </s:bean> // or <s:bean name="com.xuhuhu.common.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.xuhuhu.common.action;
import com.opensymphony.xwork2.ActionSupport;
public class ParamTagAction extends ActionSupport{
public String execute() {
return SUCCESS;
}
}
2. Bean
两个Bean对象初始化在“param”标签之后。
Person.java
package com.xuhuhu.common;
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.xuhuhu.common;
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.xuhuhu.common.Fruit" var="fruitBean"> <s:param name="fruitName">Banana</s:param> </s:bean> <s:bean name="com.xuhuhu.common.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.xuhuhu.common.action.ParamTagAction" > <result name="success">pages/param.jsp</result> </action> </package> </struts>
5. 示例
http://localhost:8080/struts2paramtag/paramTagAction.action
在浏览中打上面的网址,访问后显示结果如下:
参考
上一篇:
Struts2 <s:i18n>标签示例
下一篇:
Struts2 <s:property>标签实例
