Эквивалент JSP к Facelets для базы данных при условии ссылки на URL в цикле - PullRequest
0 голосов
/ 04 января 2012

Я портирую учебник Affableben для сервлетов / jsp Netbeans на JSF Framework и хочу использовать Facelets для представления.

У меня уже есть сущности JPA, сессионные компоненты и управляемые компоненты. Я начинаю с просмотра. Однако я не нашел эквивалента в Facelets для обхода этой строки:

<a href="<c:url value='category?${category.id}'/>">

Это полный цикл, как в jsp, так и в facelets:

JSP код:

<c:forEach var="category" items="${categories}">
    <div class="categoryBox">
        <a href="<c:url value='category?${category.id}'/>">
            <span class="categoryLabel"></span>
            <span class="categoryLabelText"><fmt:message key='${category.name}'/></span>

            <img src="${initParam.categoryImagePath}${category.name}.jpg"
                 alt="<fmt:message key='${category.name}'/>" class="categoryImage">
        </a>
    </div>
</c:forEach>

Эквивалентный код Facelets:

<ui:repeat var="category" value="${categoryController.items}">
    <div class="categoryBox">
        <h:link outcome="${category.id}"/>
        <span class="categoryLabel"></span>
        <span class="categoryLabelText">${category.name}</span>

        <img src="./resources/img/categories/${category.name}.jpg"
                 alt="${category.name}" class="categoryImage"/>

    </div>
</ui:repeat>

Эта строка не работает в Facelets, как ожидалось:

<h:link outcome="${category.id}"/>

Каким будет рабочий эквивалент в Facelets?

РЕДАКТИРОВАТЬ 1

public String getName() throws UnsupportedEncodingException {
    return URLEncoder.encode(name, "UTF-8");
}

Предупреждающее сообщение: невозможно найти ресурс img / Categories / Fruit +% 26 + veg.jpg

Ответы [ 2 ]

1 голос
/ 04 января 2012

<h:link> использует неявную навигацию JSF и требует реального (неявного) значения результата навигации. Вам необходимо указать идентификатор представления в результате. Вам необходимо указать параметры запроса по <f:param>. Вам также нужно вставить вкладки и изображение в ссылку, как вы это делали в первоначальном примере. При условии, что у вас есть файл category.xhtml в корне, это должно сделать:

<h:link outcome="category">
    <f:param name="id" value="#{category.id}" />

    <span class="categoryLabel"></span>
    <span class="categoryLabelText">#{category.name}</span>
    <img src="./resources/img/categories/#{category.name}.jpg"
             alt="#{category.name}" class="categoryImage"/>
</h:link>

Не имеет отношения к конкретному вопросу, вы должны использовать <h:graphicImage> вместо <img>. Таким образом, JSF обеспечит правильную настройку src. В вашем конкретном случае это будет

<h:graphicImage name="img/categories/#{category.name}.jpg"
    alt="#{category.name}" class="categoryImage"/>

(обратите внимание, что я заменил ${} на #{}, просто чтобы придерживаться стандарта и для согласованности)

0 голосов
/ 04 января 2012

Вы можете изменить эту строку:

<a href="<c:url value='category?${category.id}'/>">

на эту:

<h:link outcome="category.xhtml?id=#{category.id}" />
<h:link outcome="category">
   <f:param name="id" value="#{category.id}" />
</h:link>
<h:outputLink value="category.xhtml?id=#{category.id}" ></h:outputLink>
...