2

我有以下 Primefaces 页面和控制器。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pm="http://primefaces.org/mobile">

<f:view renderKitId="PRIMEFACES_MOBILE"/>

<h:head>

</h:head>

<h:body id="body">

    <pm:page id="page">
        <pm:header title="MyProduct">
        </pm:header>

        <pm:content id="content">
            <p:dataList value="#{likeditems.likedItems}" var="item" pt:data-inset="true" paginator="true" rows="5">
                <f:facet name="header">
                    List of Cars
                </f:facet>
                <h:outputLink value="#{item.url}">
                    <h2>#{item.title}</h2>
                    <p>#{item.price}</p>
                    <p class="ui-li-aside"><strong>XXXX</strong></p>
                </h:outputLink>
                <f:facet name="footer">
                    List of Cars
                </f:facet>
            </p:dataList>
            <p:outputLabel
                    id="priceHint"
                    value="..."
                    cache="false"/>
        </pm:content>

        <pm:footer title="m.MyProduct.info"></pm:footer>
    </pm:page>
</h:body>

</html>

控制器

@ManagedBean(name = LikedItemsView.NAME)
@SessionScoped
public class LikedItemsView {
    public static final String NAME = "likeditems";

    public List<LikedItem> getLikedItems()
    {
        final LikedItem item1 = new LikedItem();
        item1.setTitle("Product 1");
        item1.setPrice(Money.of(CurrencyUnit.USD, 20));
        item1.setUrl("http://google.com");

        final LikedItem item2 = new LikedItem();
        item2.setTitle("Product 2");
        item2.setPrice(Money.of(CurrencyUnit.USD, 30));
        item2.setUrl("http://yandex.ru");

        final List<LikedItem> items = new LinkedList<LikedItem>();
        items.add(item1);
        items.add(item2);

        return items;
    }
}

当我访问该页面时,出现以下错误:

servlet.ServletException: Error Parsing /likeditems.xhtml: Error Traced[line: 31] The prefix "pt" for attribute "pt:data-inset" associated with an element type "p:dataList" is not bound.
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)

第 31 行是这样的:

<p:dataList value="#{likeditems.likedItems}" var="item" pt:data-inset="true" paginator="true" rows="5">

我该如何解决这个错误?

4

2 回答 2

3

data-inset属性不受<p:dataList>. 此外,所有带有前缀的属性名称data-*肯定都与 HTML5 相关。因此,按照其他人的建议删除pt前缀并不是正确的解决方案。该属性根本不会被渲染。您可以完全删除整个属性。

XML 命名空间前缀pt建议“passthrough”的简写,并且该属性在此特定片段中可识别为 passthrough 属性。这是 JSF 2.2 特有的特性,是“ HTML5 友好标记”的一部分。

正确的 XML 命名空间 URI 是http://xmlns.jcp.org/jsf/passthrough.

<html ... xmlns:pt="http://xmlns.jcp.org/jsf/passthrough">

请注意,官方的 XML 命名空间前缀是p(另请参阅该教程),但它与 PrimeFaces 的前缀冲突。我自己会亲自使用a,代表“属性”。

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<p:dataList ... a:data-inset="true">

如果您没有使用 JSF 2.2,或者在客户端对该属性没有任何用处,那么,完全删除它。它显然是从复制粘贴的代码中遗留下来的。

于 2015-01-07T14:32:59.187 回答
0

它应该data-inset只是而不是pt:data-inset

于 2015-01-07T14:06:47.427 回答