1

例如,当我尝试从 JSP 页面更改 Action 类的属性时,我可以通过表单来完成,但是当我尝试更改在 Action 类中声明的对象的属性时,我无法做到。

模型类:

public class User { 
  private String name;  
  public User(){
    this.setName("Unknown");
  } 
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

动作类:

public class UserAction{
  private User user;
  public String execute(){
    user = new User();
  }
  public User getUser(){
    return user;
  }
  public void setUser( User user ){
    this.user = user;
  }
}

User 类在构造函数中为属性设置一个默认值,我可以访问它:

<s:property value="user.name" />

但是当我尝试通过表单更改它然后在表单之后的目标页面中打印它的值时,我仍然得到默认值:

<s:form action="welcomeAction" >
  <s:textfield name="user.name" label="User name " />
</s:form>

先感谢您 :)

4

2 回答 2

2

您的方法中的以下行execute()可能是罪魁祸首:

user = new User();

设置参数后调用动作方法,因此框架将构造您的用户对象,设置参数,然后调用动作方法(在本例中execute()),该方法会立即将用户变量重新分配给一个全新的用户对象,默认完成设置。

这也解释了为什么更改 struts.xml 以调用与执行不同的方法来解决问题(请注意,您的原始 struts.xml 配置很好)。

于 2012-07-12T20:45:20.247 回答
0

我在 struts.xml 中:

<action name="welcomeAction" class="helloworld.action.UserAction">
<result>/welcome.jsp</result>
</action>

所以,我在 Action 类中创建了一个方法 setUserFields,它返回 "done" :

<action name="welcomeAction" class="helloworld.action.UserAction" method="setUserFields">
<result name="done">/welcome.jsp</result>
</action>
于 2012-07-12T19:31:12.563 回答