数据标签
action标签
action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name及namespace,如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含在本页面中来
属性:
id:这是一个可选属性,该属性将作为该Action的引用ID
name:这是一个必填属性,通过该属性指定该标签调用那个Action
namespace:这是一个可选属性,该属性指定该标签调用的Action所在的namespace
executeResult:这是一个可选属性,该属性指定是否要将Action的处理结果页面包含到本页面,该属性默认值是false,即不包含
ignoreContextParams:这是一个可选参数,它指定该页面中的请求参数是否需要传入调用的Action,该参数的默认值是false,即将本页面的请求参数传入被调用的Action
package test;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TagAction extends ActionSupport{
private String author;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
//定义第一个处理逻辑
public String execute() throws Exception{
return "done";
}
//定义第二个处理逻辑
public String login() throws Exception{
ServletActionContext.getRequest().setAttribute("author",getAuthor());
return "done";
}
}
Action类包含了两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action,
<package name="test" extends="struts-default">
<!-- 定义第一个Action,使用test.TagAction的execute方法作为处理逻辑 -->
<action name="tag1" class="test.TagAction">
<result name="done">succ.jsp</result>
</action>
<!-- 定义第二个Action,使用test.TagAction的login方法作为处理逻辑 -->
<action name="tag2" class="test.TagAction" method="login">
<result name="done">loginSucc.jsp</result>
</action>
</package>
在JSP页面中使用<s:action>标签来调用这两个逻辑Action
下面调用第一个Action,并将结果包含到本页面中<br>
<s:action name="tag1" executeResult="true"></s:action><hr/>
下面调用第二个Action,并将结果包含到本页面中<br>
阻止本页面请求参数传入Action<br>
<s:action name="tag2" executeResult="true" ignoreContextParams="true"></s:action><hr/>
下面调用第二个Action,且不将结果包含到本页面中<br>
<s:action name="tag2" executeResult="false"></s:action>
<s:property value="#attr.author"></s:property>
bean标签
bean标签用于创建一个JavaBean实例,可以在该标签体内受用<param…/>标签为该JavaBean实例传入属性,当需要传入属性值,则应该为JavaBean类提供对应的setter方法;需要访问属性值,则应该提供getter方法
属性:
name:该属性是一个必填属性,指定要实例化的JavaBean的实现类
id:该属性是一个可选属性,如果指定,则该JavaBean实例会被放入StackContext中,从而允许直接通过id属性来访问该实例
package test;
public class Person {
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age