私は PrimeFaces selectOneMenu を使用して、いくつかの画像とその横に文字列を表示しています。画像の横にある文字列だけに関心があります。画像自体は表示専用です。これを試しましたが、うまくいきませんでした:
<p:selectOneMenu id="SkinChooser"
value="#{personBean.skin}" panelStyle="width:150px"
effect="fade" var="s" style="width:160px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{personBean.selectedSkins}"
var="skin" itemLabel="#{skin.skinType}" itemValue="#{skin}" />
<p:column>
<p:graphicImage value="/resources/images/skin/#{s.skinPhoto}" />
</p:column>
<p:column>
#{s.skinType}
</p:column>
</p:selectOneMenu>
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<Skin> selectedSkins;
static {
System.err.println("Array is filled");
selectedSkins = new ArrayList<Skin>();
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<Skin> getSelectedSkins() {
return selectedSkins;
}
public void setSelectedSkins(List<Skin> selectedSkins) {
this.selectedSkins = selectedSkins;
}
public Skin getSkin() {
return skin;
}
public void setSkin(Skin skin) {
this.skin = skin;
}
}
しかし、selectOneMenu コンポーネントはまだ何もレンダリングしません!