大家好,想请教一个问题是关于struts2的Action在struts.xml中的配置,我说的配置不是说怎么在struts.xml配置方法,我是想问大家做项目的时候都是怎么配置的,小弟是没有struts2的项目,所以现在希望大家可以经验之谈,这问题我也想百度下,但百度出来的都是strus.xml详细配置,都不是我想要的。 用struts2的时候我们调用对于action中的方法都是actioName!method,我现在希望可以把那个“!”去掉,希望地址栏只是个普通的地址不要搞“特殊”,所以我想到两个方法:
一、假设一个action中拥有4个自定义方法,覆写ActionSupport的execute(),页面用ActionName.action?method="方法名字",execute()里面加if()来判断具体到那个自定义方法;
方法一例子execute(){
if(mehotd=="insert"){
insert();
}else if(method=="list"){
list();}
二、假设一个action中拥有4个自定义方法,原本在struts.xml中是4个自定义方法共享一个action,我就将其分成一个自定义方法就对于一个action;
方法二例子
<action name="Adminlist" class="com.devt2.action.AdminAction" method="list">省略内容</action>
<action name="Admininsert" class="com.devt2.action.AdminAction" method="insert">省略内容</action>
方法三、方法四、方法N,小弟愚笨只能想到两种方法,希望大家不吝赐教,感谢感谢
一、假设一个action中拥有4个自定义方法,覆写ActionSupport的execute(),页面用ActionName.action?method="方法名字",execute()里面加if()来判断具体到那个自定义方法;
方法一例子execute(){
if(mehotd=="insert"){
insert();
}else if(method=="list"){
list();}
二、假设一个action中拥有4个自定义方法,原本在struts.xml中是4个自定义方法共享一个action,我就将其分成一个自定义方法就对于一个action;
方法二例子
<action name="Adminlist" class="com.devt2.action.AdminAction" method="list">省略内容</action>
<action name="Admininsert" class="com.devt2.action.AdminAction" method="insert">省略内容</action>
方法三、方法四、方法N,小弟愚笨只能想到两种方法,希望大家不吝赐教,感谢感谢
解决方案 »
- HTTP协议参数的传输格式
- java.lang.UnsatisfiedLinkError???
- getHibernateTemplate.load()方法无法传int型参数???
- 根据复选框的VALUE值,判断复选框是否选中
- 这些标签是什么英文的缩写?
- 大家看看这是怎么回事?
- UFOUpload组件实现文件上传
- 有这样现成的例子吗?系统跟踪用户浏览的栏目,从而得知用户的需求,下次把相应的栏目文章发给用户
- 用JavaBean或Servlet能生成DOC文件用于网上打印吗,如何解决?
- select * from username="xxx" and passwd="xxx"如果有记录现实YES,没有现实没有,代码如何编!!(解决就给40分)
- 莫非ireport没有官方的使用文档???(谁有就给个给俺,谢,ireport4.02的)
- JSP查询数据库后显示数据问题
<result name="viewBuilding">/WEB-INF/Page/ClientProject/viewBuilding.jsp</result>
<result name="viewBuilding2">/WEB-INF/Page/ClientProject/viewBuilding2.jsp</result> </action> ProjectManageAction代码内如下@Controller("/project/manage_*")
public String viewBuildingUI() throws Exception{
}
public String viewBuilding2UI() throws Exception{
}
<action name="manage_*" class="com.xxxx.struts2.ProjectManageAction" method="{1}" >
<result name="viewBuilding">/WEB-INF/Page/ClientProject/viewBuilding.jsp</result>
</action>
<result name="viewBuilding2">/WEB-INF/Page/ClientProject/viewBuilding2.jsp</result>
</action>
</package> 一般都用通配符*的调用的时候project/manage_viewBuildingUI.do
我不知道你说这个特殊是什么意思难道你认为这种动态方法调用比你提的第一种通过?拼接参数再在action中if else判断复杂一些?
action继承了ActionSupport ,完全可以自己定义N个方法共享这一个action
也没必要想第二种情况在配置文件中指定方法
直接在页面通过!动态调用方法就行了,我觉得很方便
<struts>
<package name="comm" namespace="/manager/comm" extends="global-struts">
<action name="*_*" class="{1}" method="{2}">
<result name="topicList">/form/manager/comm/topic_list.jsp</result>
<result name="editTopic">/form/manager/comm/topic_add_edit.jsp</result>
<result name="repleyList">/form/manager/comm/repley_list.jsp</result>
<result name="addRepley">/form/manager/comm/repley_add_edit.jsp</result>
<result name="editRepley">/form/manager/comm/repley_add_edit.jsp</result>
</action>
</package>
</struts>只要定要规则,namespace对应一个模块,然后定义好方法和类名
你们好,通配符我是我开始打算就用的,我用的时候是这样的name="*",你这样用,我没试过,我用我那种通配符来就有漏洞,用默认action都解决不到的漏洞,你那种看上去也比较明显分清楚action和name
给以小例子
<form action="Login_register" method="post">
用户名:
<input type="text" name="name">
<br />
密码:
<input type="password" name="pass">
<br />
<input type="submit" value="登录">
</form>public String login() {
System.out.println("登录");
return "success";
} public String register() {
System.out.println("注册");
return "success";
}<package name="hello" extends="struts-default" namespace="/">
<action name="*_*" class="com.softeem.action.{1}Action" method="{2}">
<result name="success">{1}_{2}_success.jsp</result>
</action>
</package>
你误会了,我的特殊的意思是我不希望在地址栏上有“!”的显示,你有看过JAVA网站,在调用方法的时候有“!”的吗,他们都是将其修改成了"method或actionName".action,或者直接就假设QQ网站是Java网站,http://:ww.qq.com/admin/service/,直接这样来根本你就没看到他调用的action和方法,我这个举例是在移动看到的
用通配符,我用起来有发觉有漏洞,假设我定义了<default-action-ref name="index"/>,其他通配符,在地址栏上输入输入http://localhsot/工程名/asdfsdf,“asdfsdf”是我乱输入的,在这个时候他/她调转到XML里面,找不到对于的action,通常找不到会去找默认的“index”,但它不会,我用的是通配符方式是:name=“*” class=“com.*action” ></action>
但这缺点是多了变量,多了个if不直接,而方法2是简洁了方法1的缺点,但XML写多了东西,方法1的优点是不用在XML多写
我直接的意思是你套个判断 if else 效率会低一点,一般不会太明显,如果一个action的自定义方法多了或其他的因素就会慢得明显一点,我已经想好用哪个方法了,谢谢你们,我给分你们吧
你这个是什么来的,我百度“DMI模式”,搜索出来的都是主板之类的东西哦
<action name="Admin_*" class="..." method="{1}"></action>
AdminAction注入是这样写的
@Component("Admin")
public class AdminAction extends BeaeAction{}
按道理这样Spring已经注入的是Admin,当在运行程序的时候
地址栏写着http://localhsot/poject/Admin_insert.action这样会出错,因为找不到对应的action,但事实上在运行的时候却没有出错,还是照常运行找到对于的action和对于的方法,这是为什么呢
理论上楼上在spring注入的是Admin,struts2是Admin_insert,根本没有Admin,但道理应该是出错的,但为什么没有出错呢