PrimeFaces selectOneMenu不呈现图像和字符串 [英] PrimeFaces selectOneMenu not rendering Images and Strings

查看:105
本文介绍了PrimeFaces selectOneMenu不呈现图像和字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用PrimeFaces selectOneMenu在它们旁边显示一些图像和字符串,我只关心图像旁边的字符串,图像本身仅用于显示,我尝试了此操作,但没有用:

I'm using PrimeFaces selectOneMenu to display some images and strings next to them, i'm only concerned with the string next to the image, the image itself is for displaying only, i tried this but it didn't work:

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

inside the bean personBean i initialized the ArrayList selectedSkins as follows:

这是personBean:

and this is the 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组件仍然无法呈现任何内容!

but the selectOneMenu component still doesn't render anything!

推荐答案

为了将项目呈现为列,标记<f:selectItems>的属性itemValue必须指向对象,而不是字符串.

In order to render an item as column, the attribute itemValue of the tag <f:selectItems> must point to an Object, not a String.

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

In your case, itemValue="#{skin}" is correct.

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

If you use itemValue="skin" or itemValue="#{skin.type}", the item is rendered as normal text because its type is String.

PrimeFaces源代码将使其更加清晰.

The PrimeFaces source code will make it clearer.

参考: 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆