我得到了一份"文件"的基本编辑表格。实体(我使用JSF2和Hibernate),"创建"表单工作正常,但"编辑"没有按'吨。因此编辑表单显示当前文档值,但是当它发送新值时,backbean不会获取它们并且与旧实体一样工作。
我的edit.xhtml的一部分:
<ui:param name="doc" value="#{document.getDocument()}" />
<h:form id="editForm">
<h:inputHidden name="ID" id="ID" value="#{doc.ID}" />
<div class="input-group">
<span class="input-group-label">Title *</span>
<h:inputText type="text" class="input-group-field" size="30" name="title" id="title" a:required="required" a:placeholder="title" value="#{doc.title}"/>
</div>
<h:message for="title"></h:message>
<div class="input-group">
<span class="input-group-label">Subtitle</span>
<h:inputText type="text" class="input-group-field" size="30" name="subtitle" id="subtitle" a:placeholder="subtitle" value="#{doc.subtitle}" />
</div>
<h:message for="subtitle"></h:message>
<div class="button-group">
<h:button outcome="/main?faces-redirect=true" type="button" value="Cancel"></h:button>
<h:commandButton action="${doc.save}" value="Save">
<f:ajax render="@form" execute=":editForm" event="keyup"/>
</h:commandButton>
</div>
</h:form>
我的文档bean的一部分:
@ManagedBean
@Entity
@ViewScoped
public class document implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID")
private int ID;
@NotNull
private String title;
private String subtitle;
//Getters Setters....
@Transient
public document getDocument() {
documentDAO = new DocumentDAO();
Optional<document> doc = documentDAO.read(this.ID);
if(doc.isPresent()) {
return doc.get();
}else {
return null;
}
}
public String save() {
documentDAO = new DocumentDAO();
System.out.println("Saving Document (" + this.getTitle() + ")...");
documentDAO.update(this);
if(this.error == null || this.error.isEmpty())
return "/list?faces-redirect=true";
else
return "edit";
}
如果我编辑文档标题,例如&#34; test&#34;,通过&#34; testok&#34;,并发送表单,系统打印&#34;保存文档(测试)。 ..&#34;,而不是&#34;保存文件(testok)......&#34;尽管我能看到&#34; testok&#34;已发送html后请求(使用导航器的Web开发面板)。 我没有表格中的表格。
答案 0 :(得分:0)
我找到了一个解决方案,通过使用bean的副本进行编辑,并将其加载到视图参数中,从前一个列表页面中检索id。 在我的edit.xhtml的标题中:
<f:metadata>
<f:viewParam name="id" value="#{document.ID}"/>
<f:viewAction action="#{document.getDocument()}" />
</f:metadata>
在我的文档bean中:
@Transient
public void getDocument() {
documentDAO = new DocumentDAO();
Optional<document> doc = documentDAO.read(this.ID);
if(doc.isPresent()) {
document d = doc.get();
this.title = d.title;
this.subtitle = d.subtitle;
}
}
现在它工作正常,它更新了bean。只是复制所有成员变量有点蹩脚,也许有更好的方法。