2011-09-13 89 views
2

我從JSF 1.2升級到JSF 2並將Richfaces 3.3升級到4. 我試過各種版本的JSF2(2.02,2.06等)並且都給出相同的錯誤。未找到屬性'xxxxxx'類型org.richfaces.component.UIRepeat

我得到以下幾個小時已經傷害了我的頭的錯誤!

SEVERE: Error Rendering View[/my-testfile.xhtml] 
javax.el.PropertyNotFoundException: /templates/components-navigation.xhtml @31,54 rendered="#{component.allowed}": Property 'allowed' not found on type org.richfaces.component.UIRepeat 


/templates/components-navigation.xhtml

<a4j:outputPanel rendered="#{loginBean.loggedIn}"> 

    <a4j:repeat var="menugroup" value="#{componentNavigator.groups}"> 

     <a4j:region rendered="#{menugroup.itemCount > 0}"> 

      <div class="panel_menu"> 

       <table class="title" border="0" width="100%"> 
        <tr> 
        <td> 
         <h:outputText class="text" value="#{messages[menugroup.id]}" /> 
        </td> 
        </tr> 
       </table> 

       <table class="links" border="0" width="100%"> 
        <tbody> 
         <a4j:repeat var="component" value="#{componentNavigator.components}"> 


          <a4j:region rendered="#{component.allowed}"> 

           <a4j:region rendered="#{component.groupId == menugroup.id}"> 
            <tr class="#{component.current?'active':'unactive'}"> 
             <td>&nbsp;</td> 
             <td class="text" width="100%"> 
              <h:commandLink action="#{component.getCommandAction}" actionListener="#{componentNavigator.initControllerBean}">           
               <span style="display:block;"> 
                #{messages[component.id]}          
               </span> 
               <f:attribute name="controllerBean" value="#{component.controllerBean}" /> 
               <f:setPropertyActionListener target="#{componentNavigator.currentComponent}" value="#{component}" /> 
              </h:commandLink> 
             </td> 
            </tr> 
           </a4j:region> 

          </a4j:region> 

         </a4j:repeat>   
        </tbody> 
       </table> 

      </div> 

     </a4j:region> 

    </a4j:repeat> 

</a4j:outputPanel> 

第31行是:

<a4j:region rendered="#{component.allowed}"> 

任何想法,爲什麼沒有被發現的財產?是否存在重複組件的問題?

回答

1

#{component}是一個保留和隱含的EL對象,它指向當前的JSF組件。它可以用作如下:

<h:inputText value="#{bean.value}" styleClass="#{component.valid ? 'ok' : 'error'}" /> 

在上面的例子中,#{component}解析爲表示當前<h:inputText>,這反過來又具有isValid()方法的UIInput實例。提交後,如果組件有驗證錯誤,將設置error樣式類(可能會有例如紅色背景色),否則將設置ok樣式類。這就像在JavaScript中的this一樣。

你應該給你的作用域變量一個不同的名字。難道使用JSF以下保留EL對象之一的名稱:

0

你的 '分量' 豆需要

public boolean getAllowed() { 
    return this.allowed; 
} 

public void setAllowed(boolean allowed) { 
    this.allowed = allowed; 
} 

方法。屬性是你的bean中的一個字段,它需要一個公共的getter和setter方法。大多數IDE支持生成這些方法尋找諸如「源 - >生成Getter和Setter」之類的東西。

另一種可能性是直接調用方法。喜歡的東西,

<a4j:region rendered="#{component.isAllowed()}"> 

一個bean代碼

public boolean isAllowed() { 
    return this.allowed; 
} 

如果您已經getter和你componentNavigator豆二傳手這將是有用的,如果你能在這裏發佈(或部分)。

理查德

+0

我已經得到了我的bean我的getter/setter,這一切在JSF1.2完美地工作(無對任何bean進行更改)。它看起來可能與使用「組件」一詞作爲我的變種有關。 –

0

我改變:

<a4j:repeat var="component" value="#{componentNavigator.components}"> 

到:

<a4j:repeat var="myComponent" value="#{componentNavigator.components}"> 

,這一切都很好現在:)

我碰到這個問題,它給我的線索絆倒:

https://issues.jboss.org/browse/RF-8026

相關問題