SelectOneMenu 在编辑模式下的默认值
SelectOneMenu default value in edit mode
我有一个可编辑的数据表,包含列 "Datatype"。编辑此列时,selectOneMenu 用于 select 值 "String"、"Number" 或 "Date"。当我进入编辑模式时,"Datatype" 列设置为 "String"(数据类型列表的第一项),但我希望它是该列的当前值(如 Primefaces 展示: Click - 例如,如果我点击第二个表格的第一行和第三列,'Fiat' 应该 selected 而不是 selectOneMenu 中的第一项 - 'BMW' - 就像我的情况一样)。
我的代码可能有什么问题?
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>
数据类型类:
public class DataType implements Serializable {
private BigDecimal id;
private String code;
private String descr;
// Getters+Setters.
}
使用 Primefaces 5.1。
我可以提供所需的任何其他信息。
如果 myConverter
所标识的 Converter
实现正在 properly 执行其工作,那么如果相关实体 DataType
不执行此操作,则可能会发生这种情况equals()
(和 hashCode()
)没有正确实施。
只有 add/autogenerate 他们在您的实体中。它至少应该是这样的:
@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);
}
这也应该立即解决提交表单时的 "Validation Error: Value is not valid" 错误。
您的所有实体都应该实施它们。为避免重复样板,请考虑创建一个基础实体,您的所有实体都从中扩展。另见 Implement converters for entities with Java Generics。
我有一个可编辑的数据表,包含列 "Datatype"。编辑此列时,selectOneMenu 用于 select 值 "String"、"Number" 或 "Date"。当我进入编辑模式时,"Datatype" 列设置为 "String"(数据类型列表的第一项),但我希望它是该列的当前值(如 Primefaces 展示: Click - 例如,如果我点击第二个表格的第一行和第三列,'Fiat' 应该 selected 而不是 selectOneMenu 中的第一项 - 'BMW' - 就像我的情况一样)。
我的代码可能有什么问题?
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>
数据类型类:
public class DataType implements Serializable {
private BigDecimal id;
private String code;
private String descr;
// Getters+Setters.
}
使用 Primefaces 5.1。
我可以提供所需的任何其他信息。
如果 myConverter
所标识的 Converter
实现正在 properly 执行其工作,那么如果相关实体 DataType
不执行此操作,则可能会发生这种情况equals()
(和 hashCode()
)没有正确实施。
只有 add/autogenerate 他们在您的实体中。它至少应该是这样的:
@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);
}
这也应该立即解决提交表单时的 "Validation Error: Value is not valid" 错误。
您的所有实体都应该实施它们。为避免重复样板,请考虑创建一个基础实体,您的所有实体都从中扩展。另见 Implement converters for entities with Java Generics。