与元素类型 "p:dataList" 关联的属性 "pt:data-inset" 的前缀 "pt" 未绑定
The prefix "pt" for attribute "pt:data-inset" associated with an element type "p:dataList" is not bound
我有以下 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">
我该如何解决这个错误?
应该是data-inset
而不是pt:data-inset
<p:dataList>
. Moreover, all attribute names prefixed with data-*
are most definitely HTML5 related 本身不支持 data-inset
属性。因此,按照其他人的建议删除 pt
前缀不是正确的解决方案。根本不会呈现该属性。您也可以完全删除整个属性。
XML 命名空间前缀 pt
建议 shorthand 用于 "passthrough" 并且该属性在此特定代码段中可识别为直通属性。这是 JSF 2.2 的特定功能,是“HTML5 friendly markup”的一部分。
正确的 XML 名称空间 URI 是 http://xmlns.jcp.org/jsf/passthrough
。
<html ... xmlns:pt="http://xmlns.jcp.org/jsf/passthrough">
请注意官方的 XML 命名空间前缀是 p
(另请参阅该教程),但它与 PrimeFaces 的前缀冲突。我个人会用a
,代表"attribute"。
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<p:dataList ... a:data-inset="true">
如果您不使用 JSF 2.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">
我该如何解决这个错误?
应该是data-inset
而不是pt:data-inset
<p:dataList>
. Moreover, all attribute names prefixed with data-*
are most definitely HTML5 related 本身不支持 data-inset
属性。因此,按照其他人的建议删除 pt
前缀不是正确的解决方案。根本不会呈现该属性。您也可以完全删除整个属性。
XML 命名空间前缀 pt
建议 shorthand 用于 "passthrough" 并且该属性在此特定代码段中可识别为直通属性。这是 JSF 2.2 的特定功能,是“HTML5 friendly markup”的一部分。
正确的 XML 名称空间 URI 是 http://xmlns.jcp.org/jsf/passthrough
。
<html ... xmlns:pt="http://xmlns.jcp.org/jsf/passthrough">
请注意官方的 XML 命名空间前缀是 p
(另请参阅该教程),但它与 PrimeFaces 的前缀冲突。我个人会用a
,代表"attribute"。
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<p:dataList ... a:data-inset="true">
如果您不使用 JSF 2.2,或者在客户端对该属性没有任何用处,那么,完全删除它。它显然是复制粘贴代码的剩余部分。