没有表单的struts2中的绑定参数

时间:2010-11-29 02:27:05

标签: binding parameters struts2

HI: 使用表单时,clien的参数可以绑定到对象,例如:

processing-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>

在severside:

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标签,所以struts如何知道放置参数的位置?

2 个答案:

答案 0 :(得分:3)

你以同样的方式处理它。如果您的字段名为firstname,则您需要在该操作上使用setFirstname方法。参数是来自表单还是来自JavaScript是无关紧要的。

<强>更新

根据您修改后的代码示例,您需要在行动中使用getWrapper方法来公开ParaWrapper对象。

你可以避免使用“包装器”。通过实施ModelDriven界面并使ParaWrapper成为您的模型的前缀。那么你只需要参数,例如:firstName,lastName等(ParaWrapper上的任何字段)。

答案 1 :(得分:1)

我认为你不应该使用私有字段来表示应该通过Struts2设置的值。

说明:

我不知道如何通过JavaScript将参数发布到您的操作中,但如果您将所需参数添加到您调用的URL中,它应该可以正常工作。您可以打电话(如邮件列表中所示):

http://yourdomain/yourstruts.action?personBean.firstName=a_string&personBean.lastName=my_lastName& ...(更多人参数)

Struts2将理解点符号并尝试在目标操作中设置personBean变量。如果这是一个Bean类(每个参数都有一个空的公共构造函数和公共setter),它将生成一个新对象并使用参数调用setter。如果它无法访问参数,则无法设置任何内容。

因此,如果你的setter是公共的并且你的PersonBean类被正确定义,那么PersonBean应该在你的action personBean字段中。

希望这有帮助。