我在使用 primefaces 单元格编辑表时遇到了一些问题。所以,我有一个数据表,其中包含一个可编辑的列。此数据表通过 jpa 实体列表填充。
专注于最重要的事情,我的可编辑单元格在输出方面有一个 outputText,在输入方面有一个 selectOneMenu,它由一个枚举填充。
我的问题是,数据表在开始时正确加载,我可以成功编辑想要的字段,selectOneMenu 正确填充了枚举。如果我在 selectOneMenu 中选择一个选项,它会很好,但是当我在数据表外部单击(退出编辑模式)时,它会得到一个错误的值,因为它会获取代码,并且它应该得到描述。
我的代码:
枚举:
public enum EnumSimNao implements DetalheDominioEnum {
/**
* Sim
*/
S("Sim"),
/**
* Não
*/
N("Não");
Enum 有一个 getter,可以刷新基于某些服务的值。它总是从服务中获取这些值。我已经测试过了,值就在这里。当我说描述时,我的意思是“Sim”或“Nao”,代码分别是“S”或“N”。它来自数据库的代码,通过 jpa 实体中的 @Enumerated 属性与枚举相关联。当我拥有#{tp.respostaObrigatoria.description}
它时,它会根据返回的代码返回“Sim”或“Não”。
public String getDescription() {
DetalheEstaticoDominioEnumHelper.INSTANCE.fillDescriptions(this);
return description == null ? defaultDescription : description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
html :
<p:cellEditor>
<f:facet name="output">
<h:outputText
value="#{tp.respostaObrigatoria.description}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{tp.respostaObrigatoria}">
<f:selectItems value="#{Factories.enumSimNao}" var="simNao"
itemLabel="#{simNao.description}" itemValue="#{simNao}" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
tp是一个实体,它来自一个来自支持 bean 的列表:
所以,当我编辑单元格时,我可以看到两个描述(“Sim”或“Nao”),但是当我退出编辑模式时,它显示“S”或“N”。最后,如果我刷新页面,它会得到我选择的正确描述值。
你有什么秘诀吗?
谢谢