JSP to Facelets等效于数据库提供的URL链接循环

时间:2012-01-04 14:22:08

标签: jsf-2 facelets

我正在将servlet / jsp Netbeans的Affableben教程移植到JSF Framework,并希望将Facelets用于视图。

我已经拥有JPA实体,会话bean和托管bean。我从视图开始。但是,我没有找到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 个答案:

答案 0 :(得分:1)

<h:link>使用JSF隐式导航并需要实际(隐式)导航结果值。您需要在结果中指定视图ID。您需要按<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"/>

(请注意,我已将${}替换为#{},只是为了遵守标准和一致性)

答案 1 :(得分:0)

您可以从此行更改:​​

<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>