2015-01-07 25 views
2

我有以下Primefaces页面和控制器。与元素类型“p:dataList”关联的属性“pt:data-inset”的前缀“pt”未绑定

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

我该如何解决这个错误?

+1

它应该只是数据插图而不是pt:data-inset –

+0

@PradyumnaSwain很好,它有帮助。请提交您的评论作为答案,我会接受它。谢谢! –

+0

欢迎好友。请接受我的回答。 –

回答

3

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

XML名称空间前缀pt建议使用“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,代表“属性”。

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

如果你没有使用JSF 2.2,或者没有在客户端该属性的任何使用的话,那么,就干脆删除它。这显然是从copypasted代码剩下的。

0

应该data-inset改为只pt:data-inset

相关问题