Jsf 在p:SelectOne菜单中仅设置实体ID而不是整个实体

Jsf 在p:SelectOne菜单中仅设置实体ID而不是整个实体,jsf,primefaces,converter,selectonemenu,omnifaces,Jsf,Primefaces,Converter,Selectonemenu,Omnifaces,我正在使用JSF2.1和Tomcat7。我有以下选择一个菜单: <p:selectOneMenu id="idMarcaEdit" value="#{cfgCentraleController.selMarcaEdit}" var="p" height="250" effect="fade" converter="m

我正在使用JSF2.1和Tomcat7。我有以下选择一个菜单:

<p:selectOneMenu id="idMarcaEdit" 
                 value="#{cfgCentraleController.selMarcaEdit}" 
                 var="p"
                 height="250" 
                 effect="fade"
                 converter="marcaConverter"
                 >
    <f:selectItems value="#{cfgCentraleController.marche}" var="c" itemLabel="#{c.marca}-#{c.modello}-#{c.versione}"  itemValue="#{c}"/>  
    <p:column>
        <h:outputText value="#{p.marca}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.modello}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.versione}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.provisioning}" />
    </p:column>
</p:selectOneMenu>
它工作得很好,但我并不需要提交整个实体。我只需要它的ID

我正在为转换器使用OmniFaces:

import org.omnifaces.converter.SelectItemsConverter;

@Override
public String getAsString( FacesContext context, UIComponent component, Object value ) {
    Integer id = (value instanceof Marca) ? ((Marca) value).getIdMarca() : null;
    return (id != null) ? String.valueOf( id ) : null;
}
如何仅获取模型中实体的ID

如果您只需要ID,那么只需将ID设置为select item值即可

改变

<f:selectItems ... itemValue="#{c}" />

然后,您可以从
中卸下
转换器

另见:


更新:这在带有“自定义布局”菜单的构造中是不可能的。毕竟,
的值是从
而不是
获取的。对不起,我完全没有料到。鉴于此,您无法更改模型并删除转换器。你应该保持代码不变。最好的办法是向PF guys发布增强请求,以改善这种情况。

Ok,但显然现在我无法显示“对象的扩展数据”,我得到了java.lang.Integer类型上找不到的属性“idRete”。如果我需要描述如何做到这一点?您是否更改了
var
而不是
itemValue
之类的值?不,我已经按照您所说的做了,但不能对整数做。使用整数我无法得到单个元素的值,所以如何计算呢?看起来
取决于
。我没想到。真倒霉。无论如何,你都要保留转换器。你最好的办法是向PF发布一个增强请求,以改善这种情况。嗯,谢谢,现在我尝试使用标准JSF。我从未想过这种可能性。
<f:selectItems ... itemValue="#{c}" />
<f:selectItems ... itemValue="#{c.idMarca}" />
private Marca selMarcaEdit;
private Integer selMarcaEdit;