0

私は 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 コンポーネントはまだ何もレンダリングしません!

4

2 に答える 2

0

項目を列としてレンダリングするにitemValueは、タグの属性が<f:selectItems>文字列ではなくオブジェクトを指している必要があります。

あなたの場合、itemValue="#{skin}"正しいです。

itemValue="skin"またはを使用するitemValue="#{skin.type}"と、タイプが であるため、アイテムは通常のテキストとしてレンダリングされますString

PrimeFaces のソース コードを見ると、より明確になります。

参考:SelectOneMenu.java

于 2017-03-25T07:34:09.580 に答える