centerLayout、westLayoutを持つレイアウト構造を使用しています。中央のレイアウトユニットはprimefaces fileuploadを使用しています。web.xml に filter を追加し、fileupload に必要な lib を WEB/INF lib に追加しました。
そのリンクの手順を実装しました: PrimeFaces p:fileUpload の使用方法? リスナー メソッドが呼び出されないか、UploadedFile が null です。私の問題では機能しません。
layoutComplex.xhtml ページが読み込まれると、次のエラーが発生します:" /UI レイアウトの初期化エラー。中央のペイン要素が存在しません。中央のペインは必要な要素です。" 「ビュー [/layoutComplex.xhtml] のレンダリング エラー: java.lang.IllegalStateException: 応答がコミットされた後にセッションを作成できません」
アドレスバーに「http:....hostName/portal/dataImportingProjectCurrent.jsf」というURLを書いてもエラーにはなりません。
layoutComplex.xhtml コード部分:
<p:layoutUnit position="center" id="centerLayout">
<h:form id="formCenter" enctype="multipart/form-data">
<p:panel id="optionPanel">
<p:panel id="panelWelcome"
rendered="#{menuSelection.selectedOption == menuSelection.WELCOME}">
<ui:include src="/welcomePage.xhtml" />
</p:panel>
<p:panel id="panelUserAdd"
rendered="#{menuSelection.selectedOption == menuSelection.USER_ADD}">
<ui:include src="/kullanici.xhtml" />
</p:panel>
<p:panel id="panelProjectAdd"
rendered="#{menuSelection.selectedOption == menuSelection.PROJECT_ADD}">
<ui:include src="/proje.xhtml" />
</p:panel>
<p:panel id="panelAuthorizationAdd"
rendered="#{menuSelection.selectedOption == menuSelection.AUTHORIZATION_ADD}">
<ui:include src="/yetki.xhtml" />
</p:panel>
<p:panel id="panelRoleAdd"
rendered="#{menuSelection.selectedOption == menuSelection.ROL_ADD}">
<ui:include src="/rol.xhtml" />
</p:panel>
<p:panel id="panelDataDefining"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_DEFINING}">
<ui:include src="/dataDefining.xhtml" />
</p:panel>
<p:panel id="panelDataEvaluation"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_EVALUATION}">
<ui:include src="/dataEvaluation.xhtml" />
</p:panel>
**<p:panel id="panelDataImporting"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_IMPORTING}">
<ui:include src="/dataImporting.xhtml" />
</p:panel>**
<p:panel id="panelDataReporting"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_REPORTING}">
<ui:include src="/dataReporting.xhtml" />
</p:panel>
<p:panel id="panelAdmin"
rendered="#{menuSelection.selectedOption == menuSelection.ADMIN}">
<ui:include src="/admin.xhtml" />
</p:panel>
<p:panel id="panelCreateNewReportSchema"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_REPORTING_NEW_SCHEMA}">
<ui:include src="/dataReportingNewSchema.xhtml" />
</p:panel>
<p:panel id="panelCreateReport"
rendered="#{menuSelection.selectedOption == menuSelection.DATA_REPORT_CREATING}">
<ui:include src="/dataReportCreating.xhtml" />
</p:panel>
</p:panel>
</h:form>
</p:layoutUnit>
primefaces fileUpload に属するページ コードは、dataImportingProjectCurrent.xhtml です。
<h:body>
<h:form id="formDataImportProjectCurrent" enctype="multipart/form-data" >
<h1>
Project current fdasdata importinfdsa is under construction. Coming soon...
</h1>
<p:fileUpload label="Seçiniz"
fileUploadListener="#{dataImportingBean.handleFileUpload}"
mode="advanced" auto="true" sizeLimit="1000000"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
</h:form>
私のビーンは DataImportingBean.java です:
@ManagedBean @SessionScoped public class DataImportingBean extends GenericBean implements Serializable{
private static final long serialVersionUID = 730586496885706439L;
private UploadedFile file;
@Inject
DataImportingService DataImportingService;
@Override
public GenericService<Data, Long> getService() {
return DataImportingService;
}
@Override
public void newObject() {
setObject(new Data());
}
public void handleFileUpload(FileUploadEvent event) {
FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
System.err.println("event.getFile().getFileName(): " + event.getFile().getFileName());
}
}
回答ありがとうございました。