Как написать действие Struts2 с динамическим методом, чтобы принять вызов от jquery Ajax - PullRequest
1 голос
/ 30 марта 2011

Я борюсь с предположительно простой задачей. У меня есть вызов ajax для метода в классе действий. Как должен выглядеть метод действия? Спасибо.

$.ajax( {
    type : "POST",
    url : "loadBenchMark",
    data : {rulesetInt: 1},
    success : function(data) {          
             console.log('success');
    },
    error : function(request, textStatus, errorThrown) {
        console.log("Error Thrown:"  +request.statusText); 
        }
});

Мои Struts.xml

     <action name="loadBenchMark"
        class="com.test.cashdesk.mktpx.ui.action.LoadDefaultsAction" method="retrieveBenchmark">
        <result type="json"></result>
    </action>

Я попробовал, чтобы мой метод действия был похож на

  public String retrieveBenchmark(int rulesetInt) {
    // do something here
    return SUCCESS;
}

но призыв к действию выдает 500 internal server error.

с getter setter для rulesetInt и вызовом метода действия, как это работает. public String retrieveBenchmark() { // access rulesetInt here} Ответ отсюда

Пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 31 марта 2011

Если вы хотите отправлять различные объекты javascript и не хотите объявлять для них метод getter / setter в классе действия, используйте следующий метод

В своем классе decleration

public class YourClass extends ActionSupport implements ServletRequestAware

тогдаобъявите эту переменную и ее метод получения / установки

HttpServletRequest request


public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getServletRequest() {
    return this.request;
}

Теперь в вашей функции

public String retrieveBenchmark() {
   String stringValue=getServletRequest().getParameter("rulesetInt");
   int rulesetInt=Integer.parseInt(stringValue);//do this if your value is integer
    // do something here
    return SUCCESS;
}

теперь вы можете отправлять любую переменную, и без объявления функции получения вы можете получить к ней доступ с помощью getServletRequest ().getParameter ( "yourVariableName")

1 голос
/ 31 марта 2011

Нет, методы действий Struts2 не принимают аргументов.Если вы хотите установить параметр с именем rulesetInt, вам потребуется метод setRulesetInt.

Пример

private int rulesetInt;

public String retrieveBenchmark() {
    // do something here
    return SUCCESS;
}

public void setRulesetInt(final int rulesetInt) {
    this.rulesetInt = rulesetInt;
}
0 голосов
/ 01 апреля 2011

Спасибо за ответы. Я использовал способ Стивена Бенитеса, чтобы добиться того, чего хотел.

Мне нужно было опубликовать множество сложных массивов объектов javascript как часть вызова ajax. Итак, теперь объявлена ​​строковая переменная ajaxJSONData в действии с getter и setter. Я положил код ниже. Я десериализирую строку на стороне Java.

Ajax call:

var postData = ajaxPostData("loadGridData");
// <![CDATA[
$.ajax( {
    type : "POST",
    url : "finalRuleTbaAction",
    data : {"ajaxJSONData" : postData},
    dataType : "json",
    success : function(result) { ............
     });

функция:

function ajaxPostData(callingMethod) {
 if("loadTemplateAndCoupons" == callingMethod) {
    var result = [];
    result.push(new jsObject("ruleset", $('#ruleset').val()));
    result.push(new jsObject("benchmark", $('#productSelect').val()));
    return JSON.stringify(result);
  } else if("loadGridData" == callingMethod) {
    var result = [];
    result.push(new jsObject("ruleset", $('#ruleset').val()));
    result.push(new jsObject("benchmark", $('#productSelect').val()));
    result.push(new jsObject("couponmin", $('#couponmin').val()));
    result.push(new jsObject("couponmax", $('#couponmax').val()));
    return JSON.stringify(result);
  } 
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...