2014-12-26 35 views
-1

所以我被要求做一个自定义的JSF控件来处理我公司网站的结果分页。对于这个组件,支持bean的四种方法中的三种正常工作,但最后一种不起作用。也许我错过了一些东西,但代码看起来是正确的。我希望社区能够了解正在发生的事情。自定义JSF控件没有正确绑定

所以这里的代码。这是#{cc.attrs.goToLastPage}出现异常

<cc:interface> 
    <cc:attribute name="showingRecordMin" required="true" /> 
    <cc:attribute name="showingRecordMax" required="true" /> 
    <cc:attribute name="totalRecords" required="true" /> 
    <cc:attribute name="resultsPerPage" required="true" /> 
    <cc:attribute name="currentPageNum" required="true" /> 
    <cc:attribute name="totalPagesNum" required="true" /> 
    <cc:attribute name="resultsPerPageItems" required="true" /> 
    <cc:attribute name="resultPagesItems" required="true" /> 

    <cc:attribute name="goToNextPage" 
     method-signature="java.lang.String action()" required="true"/> 
    <cc:attribute name="goToPreviousPage" 
     method-signature="java.lang.String action()" required="true"/> 
    <cc:attribute name="goToFirstPage" 
     method-signature="java.lang.String action()" required="true"/> 
    <cc:attribute name="goToLastPage" 
     method-signtature="java.lang.String action()" required="true"/> 
</cc:interface> 

<!-- Question: We can't have a form inside of a form. Do we ecapsulate form operations here or 
    should the client handle them? --> 
<cc:implementation> 
    <div 
     style="background-color: #F0F3FA; border: 1px solid #ABABAB; height: 25px; margin: 0px; padding: 2px 8px; position: relative; vertical-align: middle;"> 
     <h:panelGroup> 
      <div style="float: left; width: auto;"> 
       Showing Results <h:outputLabel value="#{cc.attrs.showingRecordMin}" /> - <h:outputLabel value="#{cc.attrs.showingRecordMax}" /> of 
       #{cc.attrs.totalRecords} Results per Page: 
       <h:selectOneMenu value="#{cc.attrs.resultsPerPage}" onchange="$j(document).find('.pageBarSubmitBtn').click();"> 
        <f:selectItems value="#{cc.attrs.resultsPerPageItems}" /> 
       </h:selectOneMenu> 
      </div> 
      <div style="float: right; width: auto;"> 
       Showing Page #{cc.attrs.currentPageNum} of #{cc.attrs.totalPagesNum} Jump 
       to Page 
       <h:selectOneMenu id="_pagesMenu" value="#{cc.attrs.currentPage}" onchange="$j(document).find('.pageBarSubmitBtn').click();"> 
        <f:selectItems value="#{cc.attrs.resultPagesItems}" /> 
       </h:selectOneMenu> 
       <!-- These three work properly --> 
       <h:commandLink style="position: relative; top: 3px;" action="#{cc.attrs.goToFirstPage}"> 
        <h:graphicImage value="/images/arrow-first.gif" /> 
       </h:commandLink> 
       <h:commandLink style="position: relative; top: 3px;" action="#{cc.attrs.goToPreviousPage}"> 
        <h:graphicImage value="/images/arrow-previous.gif" /> 
       </h:commandLink> 
       <h:commandLink style="position: relative; top: 3px;" action="#{cc.attrs.goToNextPage}"> 
        <h:graphicImage value="/images/arrow-next.gif" /> 
       </h:commandLink> 
       <!-- This one is the bad guy --> 
       <h:commandLink style="position: relative; top: 3px;" action="#{cc.attrs.goToLastPage}"> 
        <h:graphicImage value="/images/arrow-last.gif" /> 
       </h:commandLink> 

      </div> 
      <h:commandButton style="visibility: hidden;" styleClass="jsfHidden pageBarSubmitBtn"/> 
     </h:panelGroup> 
    </div> 
</cc:implementation> 

往前走,这里是被抛出

09:23:15,108 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost- 127.0.0.1-3333-5) Unable to resolve composite component from using page using EL expression '# {cc.attrs.goToLastPage}': javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.goToLastPage}' 

这里是如何控制在我的页面中使用控制台除外: 语法

最后,这里是我的支持bean实现与此控件一起使用的接口

public interface PagableResults { 
    public int getShowingRecordMin(); 
    public int getShowingRecordMax(); 

    public ResultsPerPage getResultsPerPage(); 
    public void setResultsPerPage(ResultsPerPage rpp); 

    public int getCurrentPageNum(); 
    public void setCurrentPageNum(int pageNum); 

    public int getTotalPagesNum(); 
    public int getTotalRecordsNum(); 

    public List<SelectItem> getResultsPerPageItems(); 
    public List<SelectItem> getResultsPagesItems(); 

    public void goToFirstPage(); 
    public void goToLastPage(); 
    public void goToPreviousPage(); 
    public void goToNextPage(); 
} 

回答

0

您有拼写错误的方法签名:

<cc:attribute name="goToLastPage" 
    method-signtature="java.lang.String action()" required="true"/> 
+0

伟大的工作!我一直盯着代码几个小时,从未注意到!我猜测眼睛只能看到它想看的东西! – user2980252