2014-12-25 2 views
1

У меня есть файл с именем вида JSP example.jsp и когда нажать на кнопку ниже метод JQuery вызывается:

$(document).ready(function() { 
    $("#a_button").click(function() { 
     var json_model== { 
        field1 : $("#a_textarea1").val(), 
        field2 : $("#a_textarea2").val(), 
        field3 : $("#a_textarea3").val(), 
     }; 
     $.getJSON('AnAction', { 
      model : json_model 
     }, function(jsonResponse) { 
      alert('jsonResponse here'); 
     }); 
    }); 
}); 

А вот мой класс действия:

public class ActionClass implements Action { 

private Model model; 

@Override 
public String execute() throws Exception {return null;} 

public String actionMethod() { 
    System.out.println("Its Here"); 
    System.out.println(model.getField1()+" "+model.getField2()+" "+model.getField3()+" "); 
    return SUCCESS; 
} 


public Model getModel() { 
    return model; 
} 

public void setModel(Model model) { 
    this.model = model; 
} 

} 
класс

А вот модель:

public class Model { 

private String field1; 
private String field2; 
private String field3; 

public Model(String field1,String field2, String field3) { 
    super(); 
    this.field1 = field1; 
    this.field2 = field2; 
    this.field3 = field3; 
} 

public String getField1() { 
    return field1; 
} 
public void setField1(String field1) { 
    this.field1 = field1; 
} 
public String getField2() { 
    return field2; 
} 
public void setResult(String field2) { 
    this.field2 = field2; 
} 
public String getField3() { 
    return field3; 
} 
public void setField3(String field3) { 
    this.field3 = field3; 
} 

} 

Мой struts.xml:

<action name="AnAction" class="controller.ActionClass" method="actionMethod"> 
    <result type="json">/example.jsp</result> 
</action> 

Когда я нажимаю кнопку, мой рабочий вызов работает, и я вижу Его здесь текст на боковой панели сервера. Но вызов действия не отображает объект Model.I означает, что «model» имеет значение null при вызове действия. Однако, когда я перемещаю поле1, поле2 и поле3 в ActionClass, как показано ниже, работают. Но, конечно, я хочу только модельный объект внутри Action Class. Как мне это сделать. Спасибо за все советы.

//THIS IS WORKED VERSION OF ACTION CLASS 
public class ActionClass implements Action { 

private String field1; 
private String field2; 
private String field3; 

@Override 
public String execute() throws Exception {return null;} 

public String actionMethod() { 
    System.out.println("Its Here"); 
    System.out.println(field1+" "+field2+" "+field3+" "); 
    return SUCCESS; 
} 


public String getField1() { 
    return field1; 
} 
public void setField1(String field1) { 
    this.field1 = field1; 
} 
public String getField2() { 
    return field2; 
} 
public void setResult(String field2) { 
    this.field2 = field2; 
} 
public String getField3() { 
    return field3; 
} 
public void setField3(String field3) { 
    this.field3 = field3; 
} 

} 


//AND MY JQUERY METHOD WHICH IS COMPATIBLE WITH ABOVE 
$(document).ready(function() { 
    $("#a_button").click(function() { 

     $.getJSON('AnAction', { 
      field1 : $("#a_textarea1").val(), 
       field2 : $("#a_textarea2").val(), 
       field3 : $("#a_textarea3").val() 
     }, function(jsonResponse) { 
      alert('jsonResponse here'); 
     }); 
    }); 
}); 

ответ

1

Вы можете использовать имена параметров с префиксом model.

var json_model = { 
    "model.field1" : $("#a_textarea1").val(), 
    "model.field2" : $("#a_textarea2").val(), 
    "model.field3" : $("#a_textarea3").val(), 
}; 
$.getJSON('AnAction', json_model, function(jsonResponse) { 
     alert('jsonResponse here'); 
    }); 

Модель также нуждается в конструктор по умолчанию,

public Model() {} 

так что вы можете создать его экземпляр к действию

private Model model = new Model(); 

После этих изменений перехватчик params сможет заполнить объект model с помощью OGNL. И поскольку ваши свойства модели являются только строками, они будут установлены без какого-либо возможного преобразования параметров.

+0

Благодарим за отзыв, но я не понимаю, где я должен создать экземпляр объекта модели в действии? –

+0

Я создал экземпляр встроенного в этот ответ, где вы определили свою собственность в классе действий. –

+0

Спасибо, Роман, это работает. Также я предлагаю посмотреть ниже сообщение –

0

Благодаря римскому C. С некоторыми изменениями в его ответе он РАБОТАЕТ! Мои отличия от ответа Roman C:

1) Я не создаю экземпляр объекта модели в классе действий. 2) Я изменяю все «частные» модификаторы доступа на «public» (в противном случае у OGNL есть проблемы)

Смежные вопросы