【发布时间】:2011-12-10 00:56:54
【问题描述】:
情况如下,我有一个页面要添加/更新用户 在 prerender 方法中根据参数创建新对象或获取现有对象
@Component("user")
@Scope("request")
public class UserBean {
private User userObj;
private boolean editUser;
public String addUser() throws Exception {
if (editUser) {
userService.updateUser(userObj);
} else {
userService.addUser(userObj);
}
return "users?faces-redirect=true";
}
public void preRender(ComponentSystemEvent event) throws Exception {
System.out.println("############ PRERENDER #############");
if (editUser) {
userObj = userService.getUser(userID);
pageTitle = "Updating " + userObj.getName();
buttonTitle = "Save Changes";
} else {
userObj = new User();
pageTitle = "Adding new user";
buttonTitle = "Add User";
}
}
在 jsf 页面中,我将 prerender 称为:
<f:event id="event1" listener="#{user.preRender}" type="javax.faces.event.PreRenderComponentEvent" />
但是当我按下添加按钮时,如下所示:
<h:commandButton value="#{user.buttonTitle}" action="#{user.addUser}" style="width: 105px; "/>
我遇到了异常,请指教。
【问题讨论】:
-
我猜你的
commandButton正在向服务器创建一个新请求,这会导致 UserBean 创建一个新实例。因此userObj为空。 -
@flash 有什么解决办法吗?
-
@Mika 当然,您应该考虑将范围从请求更改为会话。那将是最简单的解决方案。这对你来说不可行,还有其他解决方案。
-
会话不是一个好的解决方案是的。
-
@Mika 您应该将范围临时设置为会话以确认这是问题所在。
标签: spring jsf jakarta-ee jsf-2