`

Struts通配符

 
阅读更多
如struts中配有如下几个action,ManagerUserAction中有与之对应的方法
<action name="addUser" class="com.netshuai.action.ManagerUserAction" method="add">
<result name="success">/addUser.jsp</result>
</action>
<action name="delUser" class="com.netshuai.action.ManagerUserAction" method="del">
<result name="success">/delUser.jsp</result>
</action>
<action name="updateUser" class="com.netshuai.action.ManagerUserAction" method="update">
<result name="success">/updateUser.jsp</result>
</action>

如果使用通配符,可以省略写成一个action
<action name="*User" class="com.netshuai.action.ManagerUserAction" method="{1}">
<result name="success">/{1}User.jsp</result>
</action>
其中,*为通配符,{1}为*所替换的内容,如用户访问的是addUser.action,则*就被自动替换为add,{1}处也自动使用add替换。

若开发时使用统一的命名规范,则所有action可使用类似如下的一条替换即可
<action name="*_*" class="com.netshuai.action.{1}Action" method="{2}">
<result name="success">/{2}_{1}Success.jsp</result>
</action>
如上所示,所有文件都采用统一的命名规范,第一个*为分类名称,第二个*为操作名,{1}和{2}分别代表第一个和第二个*的替换值,所有action实现类都命名为分类名称+Action。
如分类名称为User,操作名为add,则访问的action名为User_add.action,action实现类名为UserAction,返回页面的名为add_UserSuccess.jsp
另:{0}代表显示所有通配符内容,如<result name="success">/{2}_{1}Success.jsp</result>改为<result name="success">/{0}Success.jsp</result>,则返回的名为User_addSuccess.jsp
====================================================================

struts2通配符  

2011-06-28 13:38:55|  分类: JAVA |  标签:通配符   |字号 订阅

struts2通配符
2010-07-26 19:22

我们新建一个struts2测试工程
假设有这样一个action,ActionTest.java
然后里面实现对用户User的crud,增删改查功能add(),del(),modify(),query(),按照一般的方法,我们可以,在struts.xml中配置4个action
<package name="test1" extends="struts-default">
     <action name="addUser" class="com.action.ActionTest" method="add">
     <result name="success">/User/addUser.jsp</result>
     </action>
     <action name="delUser" class="com.action.ActionTest" method="del">
     <result name="success">/User/delUser.jsp</result>
     </action>
     <action name="modifyUser" class="com.action.ActionTest" method="modify">
     <result name="success">/User/modifyUser.jsp</result>
     </action>
     <action name="queryUser" class="com.action.ActionTest" method="query">
     <result name="success">/User/queryUser.jsp</result>
     </action>
</package>
然后再一个jsp页面中请求这四个action

<body>
User:
    <a href="addUser.action">add</a>
    <a href="delUser.action">del</a>
    <a href="queryUser.action">query</a>
    <a href="modifyUser.action">modify</a>
</body>
这种请求方法很令人纠结,设想一下如果有很多很多action,那配置文件就会变得很大很臃肿。。
有没有更好的办法???
我们注意到如上所示,所有文件都采用统一的命名规范操作+User
所以我们可以找一个通用的符号代替这些操作------通配符* 0-n ,这给我们带来很大的方便
对于这个例子我们可以将struts.xml文件配置如下
<package name="test1" extends="struts-default">
     <action name="*User" class="com.action.ActionTest" method="{1}">
     <result name="success">/User/{1}User.jsp</result>
     </action>
</package>
只需这样就可以满足4个action请求,很方便很强大。。。*表示一个通配符,{1}表示第一个通配符代表的含义
这是一个简单的例子,加入还有一种对象,这里我们可以用Mp3也有add(),del(),modify(),query()功能
和User一样,在页面请求
<body>

User:
    <a href="addUser.action">add</a>
    <a href="delUser.action">del</a>
    <a href="queryUser.action">query</a>
    <a href="modifyUser.action">modify</a>
<br>
<br>
Mp3:
    <a href="addMp3.action">add</a>
    <a href="delMp3.action">del</a>
    <a href="queryMp3.action">query</a>
    <a href="modifyMp3.action">modify</a>
</body>

我们可以仿照User的方法配置Mp3的4个操作的action
<package name="test1" extends="struts-default">
     <action name="*User" class="com.action.ActionTest" method="{1}">
     <result name="success">/User/{1}User.jsp</result>
     </action>
     <action name="*Mp3" class="com.action.ActionTest" method="{1}">
     <result name="success">/Mp3/{1}Mp3.jsp</result>
     </action>
</package>
但是这样看着仍然感觉有点臃肿。。。。。
呵呵,我们可以用两个通配符
不过两个通配符要慎用啊,对这个例子估计一般人都会想到这样配置
<package name="test1" extends="struts-default">
<action name="**" class="com.action.ActionTest" method="{1}">
     <result name="success">/{2}/{1}{2}.jsp</result>
</action>
</package>
这样配置能不能请求成功,我告诉你不能。。。。。不信你自己可以去试一下,两个*在一块很容易引起混乱。。。
正确的配置是中间用特殊符号如_隔开
<package name="test1" extends="struts-default">
<action name="*_*" class="com.action.ActionTest" method="{1}">
     <result name="success">/{2}/{1}{2}.jsp</result>
</action>
</package>

然后页面请求统一改成*_*.action就可以了如下
<body>

User:
    <a href="add_User.action">add</a>
    <a href="del_User.action">del</a>
    <a href="query_User.action">query</a>
    <a href="modify_User.action">modify</a>
<br>
<br>
Mp3:
    <a href="add_Mp3.action">add</a>
    <a href="del_Mp3.action">del</a>
    <a href="query_Mp3.action">query</a>
    <a href="modify_Mp3.action">modify</a>
</body>
由于实训时间有限,对struts2通配符的研究只能皮毛而已
有时间的话,我们可以尝试多个通配符


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics