我有一个用户可以选择的项目的下拉列表(视图是JSF)。我想在用户从下拉列表中选择一个项目后,在同一个JSF页面上显示一个图像(即用户从下拉列表中选择单词“Cat”,并显示一组不同的猫图像)
我如何在JSF中编写代码?
注意*我正在使用带有facelets的JSF 2.0,而不是JSP。
答案 0 :(得分:1)
在下拉列表中提供包含图片网址的列表,然后使用h:graphicImage
在所选网址上显示图片。然后,使用f:ajax
重新渲染图像,然后更改下拉列表。
这是一个启动示例:
<h:form>
<h:selectOneMenu value="#{bean.imageURL}">
<f:selectItems value="#{bean.imageURLs}" />
<f:ajax event="change" render="image" />
</h:selectOneMenu>
<h:graphicImage id="image" value="#{bean.imageURL}" />
</h:form>
豆:
private List<String> imageURLs; // +getter
private String imageURL; // +getter +setter
答案 1 :(得分:0)
BalusC的答案是(一如既往:)正确,但正如您所注意到的那样,selectOneMenu中会有一个URL列表。这就是为什么我问你如何存储你的图像。我通常这样做的方式:(根据我所知道的标准方式,希望有人会纠正我,如果我错了)你将图像存储在服务器上的某个位置,并存储在存储其位置的数据库中。这就是为什么我建议创建一个MyImage类(将映射到数据库表),您将在其中存储图像的名称以及在服务器上获取其位置的方法(例如,您可以使用像猫这样的名称空间来实现它将有一个String namespace = "cats"
和一个String imageName
以及一个返回类似String getImageLocation() {return "http://something.com/images/"+namespace+"/"+imageName;}
的网址的方法,请记住让它看起来像一个getter非常重要,这样JSF就可以使用它了。然后,您所要做的就是从数据库中获取给定命名空间的MyImages列表,并在dataTable中渲染图像,如下所示:
<h:dataTable value="#{myBeanWithAListOfImages.images}" var="img">
<h:column>
<h:graphicImage value="img.imageLocation"/>
</h:column>
</h:dataTable>
图片是List<MyImage>
的地方。这应该可以工作并在一列中打印图像。