使用此代码,我可以根据下拉选择返回一个图像。关于如何返回多个图像的任何想法(我试图用图像创建一个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}"/>
答案 0 :(得分:2)
尝试像使用ui:repeat
一样使用循环,但请改用c:forEach
。 ui:repeat
只为h:graphicImage
和c: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;
}
}