インスタンス行の選択を行いたい DataTable があります。行をクリックすると、ダイアログが表示され、PanelGrid にレコードの詳細が表示されます。私が直面している問題は、Dialog と PanelGrid がレンダリングされなかったことです。ブラウザからソースを表示すると、要素が見つかりませんでした。また、Apache ログ ファイルには、「javax.faces.FacesException: ビューで識別子 "frmMain:strMaint" を持つコンポーネントが見つかりません。」というエラーが記録されています。frmMain は HTML フォームの ID、strMaint は PanelGrid の ID です。
以下は XHTML ファイルです。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>PROFIT V10</title>
<h:outputStylesheet name="styles.css" library="css" />
</h:head>
<h:body>
<h:form id="frmMain">
<p:panel styleClass="layout-panel"
style="width: 98%; margin-left: auto; margin-right: auto; margin-top: 15px;">
<h2>Store Search</h2>
<p:focus context="pnlStoreSearchCriteria" />
<h:panelGrid id="pnlStoreSearchCriteria" columns="2" styleClass="panel-search">
<h:outputText value="Company" />
<p:selectOneMenu id="coySub" value="#{storeSearchBean.coySub}" effect="">
<f:selectItems value="#{storeSearchBean.coysubmsts}" var="coysub"
itemValue="#{coysub.coy_sub}"
itemLabel="#{coysub.coy_sub} - #{coysub.coy_sub_name}" />
</p:selectOneMenu>
<h:outputText value="Business Unit" />
<p:selectOneMenu id="storeCat" value="#{storeSearchBean.storeCat}">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{storeSearchBean.strcatmsts}" var="strcatmst"
itemValue="#{strcatmst.category}"
itemLabel="#{strcatmst.category} - #{strcatmst.category_name}" />
</p:selectOneMenu>
<h:outputLabel for="store" value="Store" />
<p:autoComplete id="store" value="#{storeSearchBean.store}" maxResults="10" maxlength="4"
completeMethod="#{storeSearchBean.populateStoreAutoComplete}" size="4" />
<h:outputLabel for="storeName" value="Store Name" />
<p:autoComplete id="storeName" maxlength="30" size="50"
value="#{storeSearchBean.storeName}" maxResults="10"
completeMethod="#{storeSearchBean.populateaStoreNameAutoComplete}" />
<f:facet name="footer">
<h:panelGroup id="pnlgrpButtonSearch">
<p:commandButton id="btnReset" type="reset" value="Reset"
action="#{storeSearchBean.doReset}" />
<p:commandButton id="btnSearch" type="submit" value="Search"
action="#{storeSearchBean.doSearch}"
update="pnlStoreSearchResult" />
</h:panelGroup>
</f:facet>
</h:panelGrid>
<p:separator />
<p:outputPanel id="pnlStoreSearchResult">
<p:dataTable id="tblStoreSearchResult" value="#{storeSearchBean.stores}" var="store"
emptyMessage="No data to display" paginator="true" rows="10"
paginatorPosition="bottom" draggableColumns="true" editable="true"
selection="#{storeSearchBean.selectedStore}" selectionMode="single">
<!--
<p:ajax event="rowSelect" listener="#{storeSearchBean.onRowSelect}" update="frmMain:strMaint"
oncomplete="strmstDialog.show()" />
<p:ajax event="rowUnselect" listener="#{storeSearchBean.onRowUnselect}" />
-->
<p:column sortBy="#{store.store_coy_sub}" headerText="Company">
<h:outputText value="#{store.store_coy_sub}" />
</p:column>
<p:column sortBy="#{store.store_category}" headerText="Business Unit">
<h:outputText value="#{store.store_category}" />
</p:column>
<p:column sortBy="#{store.store}" headerText="Store">
<h:outputText value="#{store.store}" />
</p:column>
<p:column sortBy="#{store.store_name}" headerText="Store Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{store.store_name}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{store.store_name}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{store.store_type}" headerText="Type">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{store.store_type}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{store.store_type}">
<f:selectItem itemValue="W" itemLabel="W" />
<f:selectItem itemValue="S" itemLabel="S" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{store.store_del_cd}" headerText="Deleted">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{store.store_del_cd}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{store.store_del_cd}">
<f:selectItem itemValue="Y" itemLabel="Y" />
<f:selectItem itemValue="N" itemLabel="N" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:rowEditor />
</p:column>
</p:dataTable>
<p:dialog id="dlgMaint" header="Strmst Maintenance" widgetVar="strmstDialog" resizable="false"
modal="true" showEffect="fade" hideEffect="fade">
<h:panelGrid id="strMaint" columns="2">
<h:outputText value="#{storeSearchBean.selectedStore.store}" />
<h:outputText value="#{storeSearchBean.selectedStore.store_name}" />
</h:panelGrid>
</p:dialog>
</p:outputPanel>
</p:panel>
<div id="copyright">Copyright © 2012 QR Retail Automation (ASIA) Sdn. Bhd. All rights reservered.</div>
</h:form>
</h:body>
</html>
この 2 つ<p:ajax /> component
に注目すると、Dialog と PanelGrid がブラウザーで正常にレンダリングされます。
私の環境は以下の通りです。
- NetBeans 7.1.2
- PrimeFaces 3.3.1 ( 3.2 でも試しましたが、同じです)
- JDK1.6.0.33
- Apache Tomcat 7 ( Glassfish3 でも試しましたが、同じです)
ありがとう。