Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 在编辑模式下选择一个菜单默认值_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 在编辑模式下选择一个菜单默认值

Jsf 在编辑模式下选择一个菜单默认值,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我有一个可编辑的数据表,包含列数据类型。编辑此列时,使用SelectOne菜单选择值字符串、数字或日期。当我进入编辑模式时,Datatype列被设置为字符串数据类型列表的第一项,但我希望它是该列的当前值,就像Primefaces showcase中一样:-例如,如果我单击第二个表的第一行和第三列,应该选择“菲亚特”,而不是selectOneMenu中的第一项-“宝马”,就像我的情况一样 我的代码可能有什么问题 xhtml: <p:column headerText="Type" >

我有一个可编辑的数据表,包含列数据类型。编辑此列时,使用SelectOne菜单选择值字符串、数字或日期。当我进入编辑模式时,Datatype列被设置为字符串数据类型列表的第一项,但我希望它是该列的当前值,就像Primefaces showcase中一样:-例如,如果我单击第二个表的第一行和第三列,应该选择“菲亚特”,而不是selectOneMenu中的第一项-“宝马”,就像我的情况一样

我的代码可能有什么问题

xhtml:

<p:column headerText="Type" >
        <p:cellEditor>
                <f:facet name="output">
                        <h:outputText value="#{item.dataType.code}" />
                </f:facet>
                <f:facet name="input">
                        <p:selectOneMenu value="#{item.dataType}" converter="myConverter" >
                              <f:selectItems value="#{backingBean.dataTypeList}" var="dt" itemLabel="#{dt.code}" itemValue="#{dt}" />
                        </p:selectOneMenu>
                </f:facet>
        </p:cellEditor>
</p:column>
使用Primefaces 5.1

我可以获得所需的任何其他信息。

如果myConverter标识的转换器实现正在执行其工作,那么如果所讨论的实体DataType没有正确实现equals和hashCode,则可能会发生这种情况

只需在实体中添加/自动生成它们。它至少应该是这样的:

@Override
public int hashCode() {
    return (id != null) 
        ? (getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

@Override
public boolean equals(Object other) {
    return (other != null && getClass() == other.getClass() && id != null)
        ? id.equals(((DataType) other).id)
        : (other == this);
}
这也应该立即解决提交表单时的错误

您的所有实体都应该实现它们。为了避免重复BoeLead,考虑创建一个基本实体,其中所有实体都从中扩展。另见

@Override
public int hashCode() {
    return (id != null) 
        ? (getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

@Override
public boolean equals(Object other) {
    return (other != null && getClass() == other.getClass() && id != null)
        ? id.equals(((DataType) other).id)
        : (other == this);
}