有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java返回JSF页面上的图像列表

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

我将如何在JSF中编写此代码

注意*我将JSF2.0用于facelets,而不是JSP


共 (2) 个答案

  1. # 1 楼答案

    在下拉列表中提供带有图像URL的列表,并使用h:graphicImage在所选URL上显示图像。然后,使用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
    
  2. # 2 楼答案

    BalusC的回答是(一如既往:)正确的,但正如您所注意到的,selectOneMenu中会有一个URL列表。这正是我问你如何存储图像的原因。我通常的做法是:(据我所知,这是标准的做法,如果我错了,希望有人能纠正我)将图像存储在服务器上的某个位置,并存储在数据库中的某个位置。这就是为什么我建议创建一个MyImage类(它将映射到一个DB表),您可以在其中存储图像的名称以及获取其在服务器上的位置的方法(例如,您可以使用诸如CAT之类的名称空间来实现它,它将有一个String namespace = "cats"和一个String imageName以及一个返回url的方法,如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>。这样可以在一列中打印图像