我正在使用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?
答案 0 :(得分:0)
如果您只需要ID,则只需将ID设置为选择项目值。
更改
<f:selectItems ... itemValue="#{c}" />
到
<f:selectItems ... itemValue="#{c.idMarca}" />
并更改
private Marca selMarcaEdit;
到
private Integer selMarcaEdit;
然后您可以从converter
删除<p:selectOneMenu>
。
selectOneMenu
wiki page 击> 更新:此结构中的“自定义布局”菜单无法实现此功能。毕竟,事实证明<p:selectOneMenu var>
的价值来自<f:selectItems itemValue>
而不是<f:selectItems var>
。对不起,我完全没想到。鉴于此,您无法更改模型并摆脱转换器。您应该保持代码不变。你最好的办法是向PF队员发布一个增强请求来改善这种情况。