PrimeFaces selectOneMenu不渲染图像和字符串

我正在使用PrimeFaces selectOneMenu来显示它们旁边的一些图像和字符串,我只关心图像旁边的字符串,图像本身仅用于显示,我试过这个但它不起作用:

#{s.skinType}

public class Skin { String skinPhoto; String skinType; public Skin() {} public Skin(String photo, String type) {} public String getSkinPhoto() {return skinPhoto;} public void setSkinPhoto(String skinPhoto) { this.skinPhoto = skinPhoto; } public String getSkinType() { return skinType; } public void setSkinType(String skinType) { this.skinType = skinType; } @Override public String toString() { return skinType; } }

在bean personBean我初始化了ArrayList selectedSkins ,如下所示:

这是personBean:

 @ManagedBean(name = "personBean") @SessionScoped public class ReportPerson { private Skin skin; private static List selectedSkins; static { System.err.println("Array is filled"); selectedSkins = new ArrayList(); selectedSkins.add(new Skin("1", "Pale white")); selectedSkins.add(new Skin("2", "Fair white")); selectedSkins.add(new Skin("3", "Light brown")); selectedSkins.add(new Skin("4", "Moderate brown")); selectedSkins.add(new Skin("5", "Dark brown")); selectedSkins.add(new Skin("6", "Deeply pigmented")); System.err.println("Finished Filling"); } public List getSelectedSkins() { return selectedSkins; } public void setSelectedSkins(List selectedSkins) { this.selectedSkins = selectedSkins; } public Skin getSkin() { return skin; } public void setSkin(Skin skin) { this.skin = skin; } } 

但是selectOneMenu组件仍然没有渲染任何东西!

你错过了转换器。

 @ManagedBean(name = "skinConverter") public class SkinConverter implements Serializable, Converter { /** Serial Version UID. */ private static final long serialVersionUID = 3661819160508007879L; @ManagedProperty(value = "#{personBean}") private PersonBean personBean; /** * Accesses the personBean * @return the personBean */ public final PersonBean getPersonBean() { return personBean; } /** * Sets the personBean * @param personBean the personBean to set */ public final void setPersonBean(final PersonBean personBean) { this.personBean = personBean; } /** * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, * javax.faces.component.UIComponent, java.lang.String) */ @Override public Object getAsObject(final FacesContext facesContext, final UIComponent component, final String submittedValue) { if (submittedValue.trim().equals("")) { return null; } else { for (Skin p : personBean.getSelectedSkins()) { if (p.getSkinType().equals(submittedValue)) { return p; } } } return null; } /** * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, * javax.faces.component.UIComponent, java.lang.Object) */ @Override public String getAsString(final FacesContext arg0, final UIComponent arg1, final Object value) { if (value == null || value.equals("")) { return ""; } else { return String.valueOf(((Skin) value).getSkinType()); } } 

}

为了将项呈现为列,标记的属性itemValue必须指向Object,而不是String。

在您的情况下, itemValue="#{skin}"是正确的。

如果使用itemValue="skin"itemValue="#{skin.type}" ,则该项目将呈现为普通文本,因为其类型为String

PrimeFaces源代码将使其更清晰。

参考: SelectOneMenu.java