您的位置:首页 > 编程语言 > Java开发

struts2进阶篇(3)

2016-07-10 11:20 330 查看

一、struts.xml中<package>的namespace属性的用法

在实际的开发中常会遇到name相同的<action>,如下代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="default" namespace="/" extends="struts-default">

<action name="add" class="action.UserAction" method="add">
<result >addUser.jsp</result>
</action>
<action name="add" class="action.HouseAction" method="add">
<result>addHouse.jsp</result>
</action>
</package>
</struts>


  以上的配置中在同一个namespace下有两个相同name为add的<action>,这样就不能区别了,为了解决这个问题,我们可以把两个<action>放在不同的namespace下,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="user" namespace="/user" extends="struts-default">

<action name="add" class="action.UserAction" method="add">
<result >addUser.jsp</result>
</action>
</package>

<package name="house" namespace="/house" extends="struts-default">
<action name="add" class="action.HouseAction" method="add">
<result>addHouse.jsp</result>
</action>
</package>

</struts>


 这样将不同模块放在不同的namespace下就可以区分了,但是在请求action时要URL中的action名前加相应的namespace名,如请求第一个使用:http:localhost:8080/Struts2Demo/user/add

二、使用<include>包含拆分的struts.xml配置文件

在大型项目中往往一个struts.xml配置过于庞大,难于维护,需要将struts.xml进行拆分.

拆分后的struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<include file="struts-house.xml"/>
<include file="struts-add.xml"/>
</struts>


拆分后的struts-house.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="house" namespace="/house" extends="struts-default">
<action name="add" class="action.HouseAction" method="add">
<result>addHouse.jsp</result>
</action>
</package>
</struts>


拆分后的struts-user.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="user" namespace="/user" extends="struts-default">

<action name="add" class="action.UserAction" method="add">
<result >addUser.jsp</result>
</action>
</package></struts>


三、<result>的配置

1.<result>标签中的name属性用法

我们定义的action类继承的Action接口中定义了几种action方法的返回值的静态常量字符串。

1.SUCCESS:表示Action执行成功,显示结果视图给用户。

2.NONE:表示Action执行成功,不显示视图给用户。

3.ERROR:表示Action执行失败,显示错误页面给用户。

4.INPUT:表示Action需要更多的输入信息,回到INPUT对应的页面。

5.LOGIN:表示用户没有正确登陆而没有正确执行,将返回该登陆视图。

当然我们也可以自定义Action方法返回值的类型。会根据返回值寻找不同的result标签。

2.<result>标签中的type属性的用法

使用<result>中的type属性就可以定义以不同的方式输出结果,它默认是"dispatcher",下面是type属性的一些常用配置:

1.dispatcher:请求转发到指定的URL

2.redirect:请求重定向到指定的URL

3.redirectAction:请求重定向到指定的Action

4.chain:Action链式处理,将请求转发到指定的Action

5.json:实现Ajsx时,返回JSON对象。

四、动态结果的配置

现在大家来考虑一个问题:例如在一个项目中分为管理员和普通用户两类,如果管理员登陆成功后跳转到后台管理页面,普通用户登陆成功后跳转到首页,像这种在配置<result>时,结果页面不能确定,需要运行时才能确定该怎么办呢?

下面看这个方法来解决这个问题:

package action;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

public class DynamicAction extends ActionSupport {
private User user;
// 下一个跳转到的Action
private String nextDispatch;

public String login(){
if (user.getPassword().equals("common")) {
nextDispatch="common";
return SUCCESS;
} else if (user.getUsername().equals("admin")) {
nextDispatch="admin";
return SUCCESS;
} else {
return INPUT;
}
}

public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getNextDispatch() {
return nextDispatch;
}
public void setNextDispatch(String nextDispatch) {
this.nextDispatch = nextDispatch;
}

}


  在web.xml中的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="user" namespace="/user" extends="struts-default">

<action name="login" class="action.UserAction" method="login">
<result name="success" type="redirectAction">${nextDispatch}</result>
</action>

<action name="common" class="action.CommonAction">
<result  name="success">common.jsp</result>
</action>
<action name="admin" class ="action.AdminAction">
<result name="success">admin.jsp</result>
</action>
</package>
</struts>


在这个配置文件中,使用${nextDispatch}取出了存储在UserAction中的nextDispatch变量的值,然后再根据它的值,使用redirectAction方式重定向到name为common或admin的<action>.

五、struts.xml中全局结果的配置

配置跳转公共错误页面的<result>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="user" namespace="/user" extends="struts-default">

<global-results>
<result name="error">/error.jsp</result>
</global-results>

<action name="add" class="action.UserAction" method="add">
<result >addUser.jsp</result>
</action>
</package>
</struts>


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: