Возврат нескольких изображений на страницу JSF - PullRequest
1 голос
/ 22 августа 2010

С помощью этого кода я могу вернуть одно изображение из выпадающего списка.Любые идеи о том, как вернуть несколько изображений (я попытался создать ArrayList с изображениями и использовать тег UI: Repeat, чтобы отобразить его в моем представлении, но мне это не удалось. Вот мой текущий код, который работает, но тольковозвращает одно изображение. Любые идеи о том, какой подход выбрать для получения более одного изображения?

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 ]

2 голосов
/ 22 августа 2010

Попробуйте использовать цикл, как вы сделали с ui:repeat, но вместо этого используйте c:forEach.ui:repeat создает только один компонент jsf для h:graphicImage, а c:forEach - столько элементов, сколько у него есть.Подробности смотрите в этой статье: http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

PS Ваш метод getTheImage выглядит не очень хорошо - вы должны рассмотреть использование идентификаторов изображений вместо имен в качестве значений вашей theOptions коллекции.

1 голос
/ 22 августа 2010

Как сказано в вашем первом вопросе о предмете, я предложил взять все изображения в 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...