JSF2.0とPrimefaces3.2を使用してアプリケーションを開発していますが、次の問題が発生しています。コンテンツがajaxリクエストで動的に読み込まれる場合、ActionListenersが呼び出されません。
メインレイアウト:
<div id="content">
<h:form name="content_form" id="content_form">
<ui:insert name="content" />
</h:form>
</div>
インデックスページ(コンテンツはメニューアクションに基づいて動的にロードされます):
<ui:composition template="layout.xhtml">
<ui:define name="content">
<ui:include src="#{ajaxViewBean.viewName}" />
</ui:define>
</ui:composition>
メニューアクションは次のように生成されます。
FacesContext context = FacesContext.getCurrentInstance();
MethodExpression methodExpression = context
.getApplication()
.getExpressionFactory()
.createMethodExpression(
context.getELContext(),
"#{ajaxViewBean.setViewName('" + navItem.getUrl()
+ "')}", null,
new Class[] { ActionEvent.class });
displayMenuItem.setUpdate(":content_form");
displayMenuItem
.addActionListener(new MethodExpressionActionListener(
methodExpression));
メニュー項目をクリックすると、AjaxViewBeanの「リクエストスコープ」を呼び出して現在のビューページを設定し、メインレイアウトの「content_form」を更新します
含まれるページ(アクションリスナーが機能しない)
最初の試行-ファイルのアップロード(uploadFile.xhtml)
<h:body> <h:form enctype="multipart/form-data"> <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" mode="advanced" update="messages" multiple="true" sizeLimit="100000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> <p:growl id="messages" showDetail="true"/> </h:form>
fileUploadControllerが呼び出されることはありません。uploadfile.xhtmlを直接リクエストした場合、または最初の読み込み時に含めた場合は、ファイルをアップロードできるので、アップロードが機能し、すべてがweb.xmlで正しく構成されていることを確認できます。
2回目の試行-インクルードページのメニューアクションリスナー
<h:body> <h:form> <p:menu type="tiered" style="width:180px"> <p:submenu label="Ajax Menuitems" icon="ui-icon-refresh"> <p:menuitem value="Save" actionListener="#{ajaxViewBean.setViewName()}" update="messages" icon="ui-icon-disk" /> <p:menuitem value="Update" actionListener="#{buttonBean.update}" update="messages" icon="ui-icon-arrowrefresh-1-w" /> </p:submenu> </p:menu> </h:form>
また、メインページで発生しているイベントリスナーは、上記のコードから動的に生成されますが、発生することはありません。
Mavenの依存関係:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
<version>1.1.14</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
私が何かを逃している場合、誰かがアドバイスをお願いできますか、またはこれをどのように解決できますか?
実際、これはStackoverflowでの私の最初の投稿なので、自分自身を明確にし、形式が台無しにならないことを願っています