前缀" pt" for attribute" pt:data-inset"与元素类型相关联" p:dataList"不受约束

时间:2015-01-07 13:55:32

标签: jsf primefaces primefaces-mobile

我有以下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">

如何解决此错误?

2 个答案:

答案 0 :(得分:3)

data-inset data-* attribtue不受<p:dataList>原生支持。此外,所有以pt为前缀的属性名称绝对是HTML5 related。因此,根据其他人的建议删除pt前缀并不是正确的解决方案。该属性根本不会被渲染。你可以完全删除整个属性。

XML名称空间前缀http://xmlns.jcp.org/jsf/passthrough表示&#34; passthrough&#34;的简写。并且属性在此特定片段中可识别为passthrough属性。这是JSF 2.2特有的功能,是&#34; HTML5 friendly markup&#34;。

的一部分

正确的XML名称空间URI是<html ... xmlns:pt="http://xmlns.jcp.org/jsf/passthrough">

p

请注意,官方XML名称空间前缀为a(另请参阅该教程),但它与PrimeFaces的名称相冲突。我自己会亲自使用<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> ... <p:dataList ... a:data-inset="true"> ,代表&#34;属性&#34;。

{{1}}

如果您没有使用JSF 2.2,或者在客户端没有使用该属性,那么,完全删除它。它显然是来自复制代码的剩余部分。

答案 1 :(得分:0)

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