обязательные параметры в стойках2 без формы - PullRequest
0 голосов
/ 29 ноября 2010

HI: При использовании формы параметр клиент может быть привязан к объекту, например:

обработка-forms.html

В клиенте:

<s:form action="register">

      <s:textfield name="personBean.firstName" label="First name" />
      <s:textfield  name="personBean.lastName" label="Last name" />
      <s:textfield name="personBean.email"  label ="Email"/>  
      <s:textfield name="personBean.age"  label="Age"  />

      <s:submit/>

</s:form>

На севере:

public class Register extends ActionSupport {

    private static final long serialVersionUID = 1L;

    private Person personBean;
        //................
}

Тогда параметр клиента привязывается к экземпляру personBean.

Теперь моя проблема в том, как связать параметры без from?

Мое действие работает как служба, которая будет вызываться в javascript, так как их связать?

Я знаю, как получить параметры:

Map(String,Object) map=ActionContext.getContext.getParameters();
String firstName= map.get("firstname")[0];

// ..........

Это слишком некрасиво: (


UPDATE

public class ParaWrapper(){
  private String firstName;
  public void setFirstName(String ..){
    this.firstName=...
  }
  //the getter of firstName
  public ....
}


public MyAction extends ActionSupport{
  private ParaWrapper wrapper;
  public void setXXX()...
  public void getXXX()...
  public void execute(){
    System.out.println(wrapper); //here I can not get the parameters,it seems that the parameters are not poputed to this object.
  }
}

Так как я не использую тег s: form, как же стойки узнают, куда помещать параметры?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Вы справляетесь с этим так же. Если ваше поле называется firstname, то вам потребуется метод setFirstname для действия. Приходят ли параметры из формы или из JavaScript, не имеет значения.

Обновление

На основании вашего пересмотренного примера кода вам понадобится метод getWrapper в вашем действии, чтобы раскрыть объект ParaWrapper.

Вы можете избежать «обертки». префикс, реализуя интерфейс ModelDriven и делая ParaWrapper вашей моделью. Тогда у вас просто будут такие параметры, как: firstName, lastName и т. Д. (Какие бы поля ни были ParaWrapper).

1 голос
/ 29 ноября 2010

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

Объяснение:

Я не знаю, как вы отправляете параметры в свое действие черезJavaScript, но он должен работать, если вы добавите необходимые параметры к URL-адресу, который вы вызываете.Вы можете позвонить (как предложено в списке рассылки):

http://yourdomain/yourstruts.action?personBean.firstName=a_string&personBean.lastName=my_lastName& ... (больше параметров человека)

Struts2 поймет точечную нотацию и попытается установитьпеременная personBean в вашем целевом действии.Если это класс Bean (с пустым открытым конструктором и открытыми сеттерами для каждого параметра), он сгенерирует новый объект и вызовет сеттеры с параметрами.Если он не может получить доступ к параметрам, ничего нельзя установить.

Итак, если ваши установщики являются общедоступными и ваш класс PersonBean определен правильно, PersonBean должен быть в вашем поле personBean действий.это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...