簡體   English   中英

javax.faces.el.PropertyNotFoundException-基為null:item

[英]javax.faces.el.PropertyNotFoundException - Base is null: item

我在數據表中遇到了這個“基數為空:項目” jsf1.1錯誤,我只是不太清楚。 它是一個兩級數據表,錯誤發生在第二級數據表上。 第一級數據表綁定到ArrayList deviceListDeviceReferences的值。 在此數據表中,它有一個包含另一個數據表的列。 此第二級數據表綁定到ArrayListholderNameMasks的值。 它從DeviceReferenceJTO(基本上是第一個數據表中的行項目)中檢索到的值。

以下是html的摘要:

<h:dataTable border="0" cellspacing="0"
    value="#{deviceReferenceBean.deviceListDeviceReferences" var="item"  
    rendered="#{not empty deviceReferenceBean.deviceListDeviceReferences }"  
    binding="#{deviceReferenceBean.deviceListDeviceReferencesTable}"
>
    <h:column>
        <h:outputText value="Holder Name:" />
        <!--  device heading -->
        <h:outputText value="#{item.deviceLabel }" styleClass="DeviceReferenceTitleBarBorder" style="width:100%; height:30px; background-color:#f9f9f9"/>
        <!-- holder name -->   
        <h:panelGrid columns="2" rendered="#{item.hasHolderNameMasks}" >
            <h:outputText value="Holder Name:" />
            <h:dataTable border="0" cellspacing="0" 
                value="#{item.holderNameMasks}" var="holderMaskItem"  
                rendered="#{not empty deviceReferenceBean.deviceListDeviceReferences and item.hasHolderNameMasks}"  
                binding="#{item.holderNameMasksTable}"
            >
                <h:column>
                    <h:outputText value="#{holderMaskItem.fieldLabel}" />
                </h:column>
                <h:column>
                    <h:panelGrid columns="1">
                        <h:inputText value="#{holderMaskItem.fieldValue}" />
                        <h:outputText value="#{holderMaskItem.instruction }" rendered="#{holderMaskItem.hasInstruction"/>
                    </h:panelGrid>
                </h:column>
            </h:dataTable>
        </h:panelGrid>  
    </h:column>
</h:dataTable>

下面是該組件的外觀:

<HtmlForm enctype="application/x-www-form-urlencoded" id="_idJsp323" rendered="true" styleClass="MAForm" submitted="false" transient="false">

    <HtmlDataTable border="0" cellspacing="0" first="0" id="_idJsp324" rendered="#{not empty deviceReferenceBean.deviceListDeviceReferences }=true" rowIndex="-1" rows="0" transient="false" var="item" binding="#{deviceReferenceBean.deviceListDeviceReferencesTable}">

        <UIColumn id="_idJsp325" rendered="true" transient="false">

            <HtmlOutputText escape="true" id="_idJsp326" rendered="true" style="width:100%; height:30px; background-color:#f9f9f9" styleClass="DeviceReferenceTitleBarBorder" transient="false"/>

            <HtmlPanelGrid border="-2147483648" columns="2" id="_idJsp327" rendered="#{item.hasHolderNameMasks}=true" transient="false">

                <HtmlOutputText escape="true" id="_idJsp328" rendered="true" transient="false" value="Holder Name:"/>

            </HtmlPanelGrid>

        </UIColumn>

    </HtmlDataTable>

</HtmlForm>

罪魁禍首在這里:

<h:dataTable
    binding="#{item.holderNameMasksTable}"
>

UI組件的binding (和id )屬性在視圖構建期間(即JSF將XHTML文件解析為組件樹的那一刻)得到解決。 但是, #{item}僅在視圖渲染期間(JSF將組件樹編碼為HTML輸出的那一刻)可用。 因此,在這里使用binding="#{item.xxx}"總是會失敗,因為#{item}null 請注意,這正是異常試圖告訴您的內容。

您有2個選擇:

  1. 完全擺脫binding屬性。
  2. 而是綁定到#{deviceReferenceBean} 在視圖構建期間可用。

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM