如何在Struts 2中访问请求?

时间:2011-12-21 19:16:20

标签: ajax struts2

我正在对jsp页面中某些操作的动作类进行AJAX调用。

但我不知道如何在我的action类中访问请求,或者如何设置该请求的响应,该响应将被发送回调用的JSP。

此外,我想知道我是否必须以不同的方式编写针对该特定操作的代码?这意味着struts.xml对于这些类型的行动应该有什么。

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "struts.apache.org/dtds/struts-2.0.dtd">; 
 <struts> 
   <package name="default" extends="struts-default">
      <action name="populateDD" class="com.struts.action.FilterData"  
                method="populateDD">    
        <result name="success">/index.jsp</result>
 </action> 
</package>
</struts>

2 个答案:

答案 0 :(得分:2)

Struts 2不关心请求是否是Ajax。

只要有可能,您应该依赖于servlet规范工件,而是使用默认的Struts 2功能,自动将请求参数和请求属性映射到动作属性和从动作属性中提取属性。

例如,如果你通过Ajax发布了一个“name”参数,并希望根据它返回一些东西,它看起来像这样:

public class MyAction extends ActionSupport {
    private String name; // Plus public getter and setter--from the request.
    private String someReturnValue; // Plus public getter and setter--for the view layer

    public String execute() {
        someReturnValue = "Your name is " + name;
        return SUCCESS;
    }
}

在JSP中,您可以通过Struts 2标签访问,或者只使用JSP EL:

<p>Return value is ${someReturnValue}</p>

如果真的需要访问request (FAQ)response (FAQ)(您很少这样做),您可以。

答案 1 :(得分:0)

Struts2将以相同的方式工作,无论您是要使用Ajax调用操作还是使用正常的提交方式。

Framework将负责将数据传输到您的操作类,并为您进行类型转换,以便您可以专注于业务逻辑。

你不需要使用Request Object,因为Struts2会以干净的方式为你提供请求参数。框架有一个名为interceptors的内置机制,可以为你完成大部分工作。

有一个名为Param interceptor的拦截器将负责向您的动作类提供请求数据。

你需要做的就是照顾下面的事情。

  1. 将同名属性放在您使用getter ans setter从JSP发送的动作类中。
  2. e.g 如果你想从你的JSP发送一些属性说

    1. 名称
    2. 年龄
    3. 你的用户

      ,你需要做的就是在你的动作类中用getter和setter声明这三个属性,所以你的动作类看起来像

      Public Class MyAction extends ActionSupport{
        private String name;
        private int age;
        private String sex;
      
        getter and setter for these properties
      
        public String execute() throw Exdeption{
             // Your business logic goes here
            // can use above properties
            return SUCCESS;
      
         }
      
      }
      

      现在,当您从JSP页面点击提交按钮或发送任何Ajax请求时,框架将开始执行操作并查看它具有的所有请求参数以及请求将采取的操作(基于struts.xml如果它具有你在jsp页面中定义的属性名称,它将检查动作是否会尝试通过使用该属性的setter方法设置该值,如果需要转换值,它将执行该类型转换为你(Struts2将开箱即用于某种类型的转换)。

      因此,如果您在请求中发送age,它将在您的操作类中查找属性age,而不是尝试使用其setter方法设置age属性中的值。 / p>

      当您必须将值发送回JSP/View时,您需要做的就是在属性中设置值并提供其getter方法。

      公共类MyAction扩展了ActionSupport {       private String userName;

        getter and setter for these properties
      
        public String execute() throw Exdeption{
            userName="Sachin Kumar Rath";
            return SUCCESS;
      
         }
      
      }
      

      因此,在您的JSP中,您需要做的就像

      Hello ${Username}
      

      所以当你使用${Username}时,会发生什么?Strust2会使用OGNL(EL language)并在你的动作类中调用getUserName()方法来获取userName属性的值

      希望这会对你有所帮助。