• 【SSH】——Struts2中的动态方法调用(二)


    当action中的方法有很多时,那应该怎么调用呢?上次我们提到的UserAction类中只有一个execute方法,如果我们需要增加用户的增删改查方法,如下:

    public class UserAction extends ActionSupport{
    
    	...其他略去
    
    	/**
    	 * 添加用户的方法
    	 * @return
    	 * @throws Exception
    	 */
    	public String add() throws Exception{
    		message="添加用户";
    		return SUCCESS;
    	}
    
    	
    	public String del() throws Exception{
    		message="删除用户";
    		return SUCCESS;
    	}
    	
    	public String edit() throws Exception{
    		message="编辑用户";
    		return SUCCESS;
    	}
    }

    我们保持struts.xml的配置不变,具体见上篇博客。

    调用的页面index.jsp就采用action名+!+方法名称+后缀的格式来实现。

     <body>
       	<a href="user!add.action">添加用户</a><br>
    	<a href="user!del.action">删除用户</a><br>
       	<a href="user!edit.action">编辑用户</a>
     
      </body>


    method属性
    这种方法我们就能做到在一个action中动态调用多个方法。但是采用上面的写法容易出错,看着也必将麻烦,那可不可以直接写上具体要调用action中的方法名称呢,比如add.action?这时候我们就需要修改Struts的配置文件了,采用method属性来区分方法名称。

    <struts>
    	
    	<package name="Struts2_006" extends="struts-default" >
    	
    		<action name="add" class="com.struts2.UserAction" method="add">
    			<result>/add_success.jsp</result>
    		</action>
    		<action name="del" class="com.struts2.UserAction" method="del">
    			<result>/add_success.jsp</result>
    		</action>
    		<action name="edit" class="com.struts2.UserAction" method="edit">
    			<result>/add_success.jsp</result>
    		</action>
    	</package>
    
    	
    </struts>

    通配符

            通过method属性虽然可以简化页面的调用,但他使得Struts配置文件中配置了大量的action,而且这些action中的很多内容都是相同的。如何解决呢?引入通配符的用法就可以解决。

    现在将Struts.xml文件进行修改

    <package name="Struts2_006" extends="struts-default" >
    	<action name="*user" class="com.struts2.UserAction" method="{1}">
    		<result>/add_success.jsp</result>
    	</action>
    		
    </package>

    index.jsp页面也要进行修改

    <a href="adduser.action">添加用户</a><br>
    	<a href="deluser.action">删除用户</a><br>
       	<a href="edituser.action">编辑用户</a>

    比较这两种方式:若不使用通配符,配置文件会十分冗余,但有一个优点就是易于控制。而使用通配符使得配置文件中省去了重复多余的action配置。

  • 相关阅读:
    问题:Controller中Response的用法
    C#中字符串前缀@和$
    C#中Viewbag和ViewData的区别
    C#中Session和Cache的区别
    try catch捕获异常
    C#开发中,添加错误日志功能,并自定义错误页面
    数据库索引中,聚集索引和非聚集索引有何区别?
    String和StringBuilder的区别?
    C#函数,引用类型作为值参数,改变参数值后,形参也会改变.重新给实参赋值后,形参则不会改变.
    jQuery操作radio选中和取值
  • 原文地址:https://www.cnblogs.com/saixing/p/6730264.html
Copyright © 2020-2023  润新知