コードで PrimeFaces autoComplete ボックスを使用しています。このコンポーネントをアプリケーションのさまざまな場所で問題なく使用しました。ui:include を介して動的にインクルードされるコードのブロックにそれを含めると、次のようになります。
14:32:30,115 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-steves-10.11.100.136-15081-2) java.lang.NullPointerException
正確なコードをコピーして、ui:include の直前の親に貼り付けると、そこで機能します。したがって、明らかに問題は、それが ui:include にあることに関係しています。インクルード内の ajax コントロールに問題はありますか? これを回避するには何が必要ですか?
私の環境はPF3.4RC1、JBoss7.1、Mojarra 2.1.5です
更新: これが私が使用しているコードです。そのコードにブレークポイントを配置し、「作業中の」オートコンプリートを使用するときにのみ触れられるため、バッキング Bean を含めることを気にしませんでした。追加情報として、フラグメントにコマンドボタンを配置しようとしましたが、バッキング Bean で actionlistener メソッドを呼び出すこともできません。
メイン (親) ページ:
<p:panel id="dataEntryPane"
rendered="#{manageItemHandler.currItem ne null}">
<!-- This Auto Complete works -->
<p:autoComplete
completeMethod="#{itemAutoComplete.autoCompleteList}" var="item"
itemLabel="#{item.itemNum}" itemValue="#{item}"
converter="ItemConverter" queryDelay="750">
<f:facet name="itemtip">
<p:panelGrid columns="2" cellpadding="5" style=" width:400px;">
<f:facet name="header">
<p:column colspan="2">
<h:outputText value="Item Information"
style="font-weight:bold; font-size:20px; font-style:italic;" />
</p:column>
</f:facet>
<p:row>
<h:outputText value="#{item.itemNum}" />
</p:row>
<p:row>
<h:outputText value="#{item.itemDesc}" />
</p:row>
</p:panelGrid>
</f:facet>
</p:autoComplete>
<ui:include src="#{manageItemHandler.dataEntryFrag}" />
</p:panel>
含まれるフラグメント:
<p:panel>
<f:facet name="header">
<h:outputText value="Operation - #{manageItemHandler.dataEntryOp.operationNum} BOM Entry" />
<p:commandButton value="SignOff"
actionListener="#{manageItemHandler.doSignOff(manageItemHandler.dataEntryOp.bom)}"
style="float:right"
rendered="#{speed2Session.isRendered('editManageItemOp')}" />
</f:facet>
<!-- This autocomplete does not work -->
<p:autoComplete completeMethod="#{itemAutoComplete.autoCompleteList}"
var="item" itemLabel="#{item.itemNum}" itemValue="#{item}"
converter="ItemConverter" queryDelay="750">
<f:facet name="itemtip">
<p:panelGrid columns="2" cellpadding="5" style=" width:400px;">
<f:facet name="header">
<p:column colspan="2">
<h:outputText value="Item Information" style="font-weight:bold; font-size:20px; font-style:italic;" />
</p:column>
</f:facet>
<p:row>
<h:outputText value="#{item.itemNum}" />
</p:row>
<p:row>
<h:outputText value="#{item.itemDesc}" />
</p:row>
</p:panelGrid>
</f:facet>
</p:autoComplete>
<p:dataTable id="dt_bom" value="#{manageItemHandler.dataEntryOp.bom}"
var="bom">
<p:column headerText="Item Number">
<p:inputText value="#{bom.component}"
disabled="#{speed2Session.isDisabled('editManageItemOp')}" />
</p:column>
<p:column headerText="Item Description">
<h:outputText value="#{bom.descrip}" />
</p:column>
<p:column headerText="QTY">
<p:inputText value="#{bom.qty}"
disabled="#{speed2Session.isDisabled('editManageItemOp')}"></p:inputText>
</p:column>
</p:dataTable>
<p:commandButton value="test button"></p:commandButton>
</p:panel>
残念ながら、スタック トレースに表示されるのは上記のエラーだけです。完全を期すために、前の行をいくつか示します。トレースでオートコンプリート ボックスに 2 回入力しましたが、入力したときに何がログに記録されたかを見ることができます。
15:58:11,578 INFO [stdout] (http-steves-10.11.100.136-15081-6) Hibernate:
15:58:11,578 INFO [stdout] (http-steves-10.11.100.136-15081-6) select
15:58:11,579 INFO [stdout] (http-steves-10.11.100.136-15081-6) itemdata0_.DESCRIP as col_0_0_
15:58:11,579 INFO [stdout] (http-steves-10.11.100.136-15081-6) from
15:58:11,580 INFO [stdout] (http-steves-10.11.100.136-15081-6) MCSITEM itemdata0_
15:58:11,580 INFO [stdout] (http-steves-10.11.100.136-15081-6) where
15:58:11,581 INFO [stdout] (http-steves-10.11.100.136-15081-6) itemdata0_.ITEM=?
15:58:16,538 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) In AutoLoginFilter.doFilter
15:58:16,541 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) In SecurityFilter.doFilter
15:58:16,542 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) OriginalURL: /speed2/modules/main.faces
15:58:16,575 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-steves-10.11.100.136-15081-6) java.lang.NullPointerException
16:02:43,442 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) In AutoLoginFilter.doFilter
16:02:43,445 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) In SecurityFilter.doFilter
16:02:43,446 INFO [com.newpig] (http-steves-10.11.100.136-15081-6) OriginalURL: /speed2/modules/main.faces
16:02:43,475 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-steves-10.11.100.136-15081-6) java.lang.NullPointerException
更新 2: 私の意図は、ユーザーがボタンをクリックすると、画面のセクションを動的に入れ替えることです。テストとして、バッキング Bean の作成時に問題のフラグメント (SpecSheet) をデフォルトに設定しました。これを行うと、そのフラグメントに対してオートコンプリートが機能します。オートコンプリートを使用して別のフラグメント (BOM) に切り替えると、それが機能しません。SpecSheet に戻しても、そのオートコンプリートは引き続き機能します。