0

我正在使用 JSF 2.1 和 Tomcat 7。我有以下 PrimeFaces 选择一个菜单:

<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>

我有这个#{cfgCentraleController}

private List<Marca> marche;
private Marca selMarcaEdit;

public Marca getSelMarcaEdit() {
    return selMarcaEdit;
}

public void setSelMarcaEdit( Marca selMarcaEdit ) {
    this.selMarcaEdit = selMarcaEdit;
    this.selectedCentrale.setIdRete( this.selMarcaEdit.getIdMarca());
}

public List<Marca> getMarche() {
    return marche;
}

它工作正常,但我真的不需要提交整个实体。我只需要它的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?

4

1 回答 1

0

如果您只需要 ID,则只需将 ID 设置为选择项值。

改变

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

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

和改变

private Marca selMarcaEdit;

private Integer selMarcaEdit;

然后你可以删除converterfrom <p:selectOneMenu>

也可以看看:


更新:在这个带有“自定义布局”菜单的结构中,这是不可能的。毕竟,事实证明<p:selectOneMenu var>是从而<f:selectItems itemValue>不是<f:selectItems var>. 对不起,我完全没想到。鉴于此,您无法更改模型并摆脱转换器。您应该保持代码不变。您最好的选择是向 PF 人员发布增强请求以改善这种情况。

于 2013-06-24T11:04:14.580 回答