Как мне получить доступ к запросу в Struts 2? - PullRequest
0 голосов
/ 21 декабря 2011

Я выполняю пост-вызов AJAX для класса action для какого-либо действия на странице jsp.

Но я не знаю, как получить доступ к запросу в моем классе действий или как установить ответ на этот запрос, который будет отправлен обратно в вызывающую 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 ]

2 голосов
/ 22 декабря 2011

Struts 2 не заботится, является ли запрос Ajax или нет.

По возможности, , а не следует полагаться на артефакты спецификации сервлета и вместо этого использовать стандартную функциональность Struts 2 для автоматического сопоставления параметров запроса и атрибутов запроса со свойствами действия.

Например, если вы опубликовали параметр "name" через Ajax и хотите вернуть что-то на его основе, это будет выглядеть примерно так:

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>

Если вам действительно нужен доступ к запросу (FAQ) или ответа (FAQ) (и вы делаете это редко), вы можете.

0 голосов
/ 22 декабря 2011

Struts2 будет работать одинаково, независимо от того, собираетесь ли вы вызывать действие, используя Ajax или обычный способ отправки.

Framework позаботится о переносе данных в ваш класс действия и выполнит преобразование типа для вас, так чточто вы можете сосредоточиться на своей бизнес-логике.

Вам не нужно возиться с объектом запроса, так как Struts2 предоставит вам параметры запроса в чистом виде. Во фреймворке есть встроенный механизм, называемый interceptors которая сделает большую часть работы за вас.

Существует перехватчик с именем Param interceptor, который позаботится о предоставлении данных запроса вашему классу действий.

Все, что вам нужно сделатьпозаботьтесь о следующих вещах.

  1. Поместите одноименное свойство в свой класс действий, который вы отправляете из JSP с помощью метода получения и установки.

например, если вы хотите отправитьнесколько объектов из вашего 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.если да, он попытается установить значения с помощью метода установки этого свойства, и если значение необходимо преобразовать, он выполнит преобразование типа для вас (Struts2 выполнит преобразование типа из коробки для некоторого типа).

Таким образом, если вы отправляете age в запросе, он будет искать свойство, а именно age в вашем классе действий, и затем попытается установить значение в свойстве age, используя его метод установки.

Когда вам нужно отправить значение обратно в JSP/View, все, что вам нужно сделать, это установить значение в свойстве и пр.ovide его метод получения.

Открытый класс 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.

Надеюсь, это поможетвы.

...