我有以下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">
如何解决此错误?
答案 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