HI: 使用表单时,clien的参数可以绑定到对象,例如:
在客户端:
<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如何知道放置参数的位置?
答案 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字段中。
希望这有帮助。