返回JSF页面上的图像列表

时间:2010-08-21 01:49:46

标签: java jsf facelets jsf-2

我有一个用户可以选择的项目的下拉列表(视图是JSF)。我想在用户从下拉列表中选择一个项目后,在同一个JSF页面上显示一个图像(即用户从下拉列表中选择单词“Cat”,并显示一组不同的猫图像)

我如何在JSF中编写代码?

注意*我正在使用带有facelets的JSF 2.0,而不是JSP。

2 个答案:

答案 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>的地方。这应该可以工作并在一列中打印图像。