2012-05-31 30 views
0

我怎樣才能在一個dataList項鍊接中使用PrettyFaces?Primefaces datalist + PrettyFaces

<p:dataList value="#{mybean.cities}" var="city"> 
    <h:link outcome="pretty:goCity"> 
     TEXT 
     <f:param name="city" value="#{city.city}" /> 
     <f:param name="cityId" value="#{city.id}" /> 
    </h:link> 
</p:dataList> 

這是我的漂亮,配置:

<url-mapping id="goCity"> 
    <pattern value="/#{cityId:city.id}/#{city:city.city}" /> 
    <view-id value="/page.xhtml" /> 
</url-mapping> 

我得到這個錯誤:

com.ocpsoft.pretty.PrettyException: PrettyFaces: Exception occurred while processing <goCity:#{city.id}> for URL </144/London> 
com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:96) 
com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) 
com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:98) 
com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) 
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) 
com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110) 

javax.el.PropertyNotFoundException: Target Unreachable, identifier 'city' resolved to null 
org.apache.el.parser.AstValue.getTarget(AstValue.java:98) 
org.apache.el.parser.AstValue.getType(AstValue.java:82) 
org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:176) 
com.ocpsoft.pretty.faces.util.FacesElUtils.getExpectedType(FacesElUtils.java:50) 
com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:79) 
com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) 
com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:98) 
com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) 
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) 
com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110) 

回答

1

你的設置是完全正確的。好像<p:dataList>在這裏的工作方式與<h:dataTable><ui:repeat>不一樣。

你可以嘗試這樣的事情要替換的組件:

<ul> 
    <ui:repeat var="city" value="#{mybean.cities}"> 
    <li> 
     <h:link outcome="pretty:goCity"> 
     TEXT 
     <f:param name="city" value="#{city.city}" /> 
     <f:param name="cityId" value="#{city.id}" /> 
     </h:link> 
    </li> 
    </ui:repeat> 
</ul> 

或用<pretty:link>,而不是<h:link>

<ul> 
    <ui:repeat var="city" value="#{mybean.cities}"> 
    <li> 
     <pretty:link mappingId="goCity"> 
     TEXT 
     <f:param name="city" value="#{city.city}" /> 
     <f:param name="cityId" value="#{city.id}" /> 
     </pretty:link> 
    </li> 
    </ui:repeat> 
</ul>