struts.xml配置及Action操作

一、result结果集配置

 1.当返回结果一样时,可以配置一个全局结果标签:

<package name="default" extends="struts-default" namespace="/">
         <global-results>
             <result name="success">/hello.jsp</result>
         </global-results>
         <action name="form1" class="com.edu.action.Form1Action"> 
         </action>
         <action name="form2" class="com.edu.action.Form2Action"> 
         </action>
         <action name="form3" class="com.edu.action.Form3Action"> 
         </action>
</package>


在Action中,返回的结果都为success时,会跳转到页面hello.jso。

二、result的type属性

 1.dispatcher:做转发操作,地址栏地址不变(默认)

 2.redirect:做重定向操作,地址栏地址会变

 3.redirectAction:重定向到Action,举例如下:

         <action name="book" class="com.edu.action.BookAction"> 
              <result name="success" type="redirectAction">order</result> 
         </action>
         <action name="order" class="com.edu.action.OrderAction"> 
              <result name="success" type="redirect">/hello.jsp</result> 
         </action>
当resul的type属性是redirectAction时,result标签里的值是action的name,如上面的order。

三、Action访问Web资源

 1.使用ServletActionContext类;

    

    调用静态方法得到request对象:

            @Override
	    public String execute() throws Exception{
		    HttpServletRequest request = ServletActionContext.getRequest();
		    String username=request.getParameter("username");
		    String password=request.getParameter("password");
		    String address=request.getParameter("address");

 2.使用ActionContext类;     

            @Override
	    public String execute() throws Exception{
	    	ActionContext context = ActionContext.getContext();
	    	Map<String, Object> map = context.getParameters();
	    	Set<String> keys = map.keySet();
			for(String key:keys){
	    		Object[] obj = (Object[])map.get(key);
	    		System.out.println(Arrays.toString(obj));
	    	}

 3.使用接口注入方式。

四、封装获取数据方式

 1.通过request对象获取到数据封装到实体类:

            @Override
	    public String execute() throws Exception{
		    HttpServletRequest request = ServletActionContext.getRequest();
		    String username=request.getParameter("username");
		    String password=request.getParameter("password");
		    String address=request.getParameter("address");
		    
		    User user = new User();
		    user.setUsername(username);
		    user.setPassword(password);
		    user.setAddress(address);
		    System.out.println(user);
 2.属性封装

  (1)在action中定义成员变量,成员变量的名称和表单里的name属性值一样;

   (2)生成变量的getter、setter方法;

    private String username;
    private String password;
    private String address;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

 3.模型驱动封装(只能把数据封装到一个实体类里面)

   (1)Action实现接口ModelDriven;

    (2)实现接口的getModel()方法并返回实体类对象;  

    private User user = new User();
        @Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

用这种方法时,实体类的属性要和表单里的name属性值一致。

 4.表达式封装(可以把数据封装到不同的实体类里面)

  (1)在action里面声明实体类变量;

   (2)生成变量的getter、setter方法;    

        private Book book;
 	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
  使用这种方式时,表单里的name属性值要在属性前加book:

   

五、封装数据到list集合

  1.在action里声明List;

   2.生成List的getter、setter方法;

    private List<User> list;	
    public List<User> getList() {
		return list;
	}
	public void setList(List<User> list) {
		this.list = list;
	}
  3.在表单里写表达式:

   <input type="text" name="list[0].username"/>

 六、封装数据到Map集合

  (1)声明Map集合;

  (2)生成setter、getter方法;

        private Map<String,User> map;	
	public Map<String, User> getMap() {
		return map;
	}
	public void setMap(Map<String, User> map) {
		this.map = map;
	}
   (3)在表单里写表达式:   

        username:<input type="text" name="map['one'].username"/>
        password:<input type="text" name="map['one'].password"/>
        address:<input type="text" name="map['one'].address"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值