将多个图像返回到JSF页面

时间:2010-08-22 15:56:38

标签: java ajax jsf jsf-2

使用此代码,我可以根据下拉选择返回一个图像。关于如何返回多个图像的任何想法(我试图用图像创建一个ArrayList并使用UI:重复标记将其渲染回我的视图,但我没有成功。这是我现在的代码,它只能工作但是只有返回一个图像。有关获取多个图像的方法的任何想法吗?

Java代码:

(Person类具有属性:private String theImage;)

public String getTheImage(){

    if(this.theSchoolChoice.equals("University of Alabama")){
        theImage = "/resources/gfx/UofALogo.png";
    }

    if(this.theSchoolChoice.equals("Harvard University")){

    }
    return theImage;
}

JSF代码:

    <h:selectOneMenu value="#{person.theSchoolChoice}" style="width : 179px; height : 21px;">
        <f:selectItems value="#{person.theOptions}"/>
    </h:selectOneMenu>
    <h:outputLabel value="  "/>

    <h:commandButton action="submit" value="Get templates" style="FONT-SIZE: medium; FONT-FAMILY: 'Rockwell';width : 128px; height : 25px;">
    <f:ajax event="change" render="image" />
    </h:commandButton>
    <br></br>
    <br></br>
    <h:graphicImage id="image" value="#{person.theImage}"/>

2 个答案:

答案 0 :(得分:2)

尝试像使用ui:repeat一样使用循环,但请改用c:forEachui:repeat只为h:graphicImagec:forEach创建了一个jsf组件 - 它拥有的项目数量很多。有关详细信息,请参阅此文 http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

P.S。您的getTheImage方法效果不佳 - 您应该考虑使用图片ID而不是名称作为theOptions集合的值。

答案 1 :(得分:1)

正如你在first question中所说的关于这个主题,我建议抓住Map<String, List<String>>中的所有图像,其中地图键是下拉值,地图值是图像集合。

由于你似乎无法弄明白,这里是一个启动示例,JSF页面应如何:

<h:form>
    <h:selectOneMenu value="#{bean.groupName}">
        <f:selectItem itemValue="Please select one" />
        <f:selectItems value="#{bean.groupNames}" />
        <f:ajax event="change" render="images" />
    </h:selectOneMenu>
    <h:panelGroup id="images">
        <ui:repeat value="#{bean.images}" var="image">
            <h:graphicImage value="#{image}" /> 
        </ui:repeat>
    </h:panelGroup>
</h:form>

以下是关联的Bean应该是这样的:

@ManagedBean
@ViewScoped
public class Bean {

    private Map<String, List<String>> allImages = new LinkedHashMap<String, List<String>>();
    private List<String> groupNames;
    private String groupName;

    public Bean() {
        allImages.put("group1", Arrays.asList("group1a.jpg", "group1b.jpg", "group1c.jpg"));
        allImages.put("group2", Arrays.asList("group2a.jpg", "group2b.jpg", "group2c.jpg"));
        allImages.put("group3", Arrays.asList("group3a.jpg", "group3b.jpg", "group3c.jpg"));
        groupNames = new ArrayList<String>(allImages.keySet());
    }

    public List<String> getImages() {
        return allImages.get(groupName);
    }

    public List<String> getGroupNames() {
        return groupNames;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

}