【发布时间】:2011-11-17 14:19:47
【问题描述】:
我目前正在使用 JBoss 学习 Java EE,但我遇到了一个简单的问题。尽管这应该很常见,但我没有在互联网上找到解决方案。
我想显示联系人列表,如果选择了联系人,则会打开详细信息页面并且可以编辑联系人信息。
联系人是 JPA 实体。创建新联系人并显示联系人列表和详细信息页面工作正常。但是我无法更新联系信息。
如果点击了一个联系人,我会打开一个详细信息页面并将 id 作为 get 参数传递。现在执行以下 JSF 代码:
<f:metadata>
<f:viewParam name="contactID" value="#{contactUpdate.contactID}" />
</f:metadata>
<h:form>
<h:outputLabel for="firstName" value="First Name:" />
<h:inputText id="firstName" value="#{contactUpdate.contact.firstName}" />
<h:commandButton id="register" action="#{contactUpdate.updateContact()}" value="Update" />
</h:form>
这就是 bean(getter 和 setter 被移除):
@Stateful
@Named
@RequestScoped
public class ContactUpdate {
@Inject
private EntityManager em;
private Contact contact;
private long contactID;
public void updateContact(){
EntityTransaction transaction = em.getTransaction();
transaction.begin();
transaction.commit();
}
public void setContactID(long contactID) {
this.contactID = contactID;
setContact(em.find(Contact.class, contactID));
}
}
如果我更新它,联系人是null。我假设请求范围太短并且已经清除。是否可以在提交时设置contactID?
我认为也可以使用@ViewScoped,但这样做<f:viewParam> 不再起作用了。
【问题讨论】:
标签: java jsf jakarta-ee jsf-2