扩展——自定义resulttype

发表时间:2017-05-16 15:43:27 浏览量( 14 ) 留言数( 0 )

学习目标:

1、自定义新的result的类型


学习过程:

    struts2设计非常好,除了它本身功能非常强大之外,我们还可以非常容易扩展它的功能,这里我们尝试一下自定义新的result类型。

一、实现类

    要扩展result,只需要实现Result接口即可,示例代码如下:

/**
 * 自定义的result类型的实现类
 * 
 * @author Administrator
 * 
 */
public class MyResult implements Result {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void execute(ActionInvocation ai) throws Exception {

		HttpServletRequest request = (HttpServletRequest)ai.getInvocationContext().get(
				StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response=(HttpServletResponse)ai.getInvocationContext().get(
				StrutsStatics.HTTP_RESPONSE);
		response.setCharacterEncoding("UTF-8");
		PrintWriter writer=response.getWriter();
		//获得users,通过值栈获得
		ValueStack valueStack=ai.getStack();

		List<User> users=(List<User>)valueStack.findValue("users");
		
		//标识以文本方式输出
		response.setContentType("text/plain");
		
		for(User user:users){
			writer.write(user.getUsername()+":"+user.getPasswd()+"|");
		}
		writer.flush();
		writer.close();
	}
}

二、配置

    在struts.xml配置文件中配置这个新的result类型,必须package标签里面配置,这样,在这个包里面,以及所有继承这个package的其它package都可以使用这个result类型了。代码如下:

<struts>
	<!-- 是否是开发模式 true 部署前真正运行前一定要改为false -->
	<constant name="struts.devMode" value="false" />
	<package name="default" namespace="/" extends="struts-default">
		<result-types>
			<result-type name="myresult" class="com.myresulttypes.MyResult"></result-type>
		</result-types>
	</package>
</struts>

三、测试

在UserAction中实现一下代码

private List<User> users;
	
/**
* 使用自定义的result 类型
 * @return
 */
public String userlist(){	
   UserDao userDao=new UserDao();

  users=userDao.getAll();
   return SUCCESS;
}
public List<User> getUsers() {
    return users;
}

public void setUsers(List<User> users) {
    this.users = users;
}

修改struts.xml的配置文件,使用这个result类型。

<struts>
	<!-- 是否是开发模式 true 部署前真正运行前一定要改为false -->
	<constant name="struts.devMode" value="false" />
	<package name="default" namespace="/" extends="struts-default">
		<result-types>
			<result-type name="myresult" class="com.myresulttypes.MyResult"></result-type>
		</result-types>

		<action name="userlist" class="com.action.UserAction" method="userlist">
			<result name="success" type="myresult"></result>
		</action>
	</package>
</struts>

在index.jsp文件中新建一个超链接访问,并查看测试结果。

<a href="userlist.action">用户列表</a>