4

アップデート

私は現在、問題を解決するために ICEfaces フォーラムに参加しています。残念ながら、提供されたオプションのいずれも現在解決策につながっていませんが、JSF トピック全体についてさらに洞察を得ることができました (クレジットは BalusC に送られます。頻繁 :-))。

このスレッドを最新の状態に保ち、問題が最終的に解決された場合は回答を投稿して、遭遇する可能性のある他の人を助けるようにします.

これまでの私の調査結果は次のとおりです。

  • fileEntry-component が正しく機能しなくなるため、Seam Multipart Filter を無効にする必要があります。
  • 私のアプリケーションにはまだ厄介なライブラリの問題があり、(サイレント) ClassLoading の問題が発生しています: EAR/lib に 1 つ、EAR/WAR/WEB-INF/lib に 1 つの 2 つの icefaces-ace.jar ファイルが存在していました。WEB-INF から 1 つを削除すると、コンポーネントは何もしなくなり、EAR/lib から 1 つを削除すると、アプリがデプロイされなくなります。

すべてのフロントエンド jar (icefaces.jar、icefaces-ace.jar、icefaces-compat.jar) を EAR/lib から WEB-INF/lib に移動すると、EAR の jar 部分 (ValueChangeEvent、RowSelectorEvent など) に対してさまざまな ClassNotFoundException を受け取ります。 . が見つかりませんでした (つまり、ビューからバックエンドに送られるすべてのイベント)。例:

12:12:42,145 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-16) MSC00001: 
Failed to start service jboss.deployment.subunit."myApp.ear"."myApp.jar".POST_MODULE: 
org.jboss.msc.service.StartException in service 
jboss.deployment.subunit."myApp.ear"."myApp.jar".POST_MODULE: Failed to process phase 
POST_MODULE of subdeployment "myApp.jar" of deployment "myApp.ear"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_06]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_06]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_06]

Caused by: java.lang.RuntimeException: Error getting reflective information for class my.company.myApp.myExampleBean with ClassLoader ModuleClassLoader for Module "deployment.myApp.ear.myApp.jar:main" from Service Module Loader
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:58)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:85)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:70)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:55)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more

Caused by: java.lang.NoClassDefFoundError: com/icesoft/faces/component/ext/RowSelectorEvent
at java.lang.Class.getDeclaredMethods0(Native Method) [rt.jar:1.7.0_06]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442) [rt.jar:1.7.0_06]
at java.lang.Class.getDeclaredMethods(Class.java:1808) [rt.jar:1.7.0_06]
at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:65) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 10 more
Caused by: java.lang.ClassNotFoundException: com.icesoft.faces.component.ext.RowSelectorEvent from [Module "deployment.myApp.ear.myApp.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.1.1.GA]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.1.1.GA]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.1.1.GA]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.1.1.GA]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.1.1.GA]
... 15 more

一部始終

Seam 2.3 と ICEfaces 3.1.0 を使用して、Web アプリケーションに取り組んでいます。つまり、JSF2 が使用されています。

私のアプリは JBoss AS 7.1.0 に EAR としてデプロイされ、アプリケーション ロジック用の JAR とすべてのビュー関連の WAR が含まれています。

最近、Seam 2.1.2 から Seam 2.3 に、ICEfaces 1.8.2 から 3.1.0 に移行しました。そのステップはひどいものでしたが、今ではすべてがうまく機能し、いくつかの小さな問題は別として.

唯一の大きな問題は、コンポーネントを使用してファイルをアップロードする場合、Seam コンポーネントを使用するか ICEfaces コンポーネントを使用するかに関係なく、Seam ではアップロードされたファイルは常に null であり、ICEfaces では fileEntryListener-Method が呼び出されないことです。

ICEfaces の場合:

2.X より前のバージョンの ICEfaces には、ice:inputFile2.X で削除され、 に置き換えられた -component がありましたace:fileEntry

InputFile は正常に機能していましたが、FileEntry は機能していません。私の問題は、 JSF : Icefaces コンポーネントを使用したファイルのアップロードに関する問題で説明されているものとまったく同じです- fileEntryListener が呼び出されることはありません。私はそこで提案を試みました(周囲のフォームで enctype="multipart/form-data" を使用し、フォームの送信に使用しh:commandButtonました)が、うまくいきませんでした。提供された唯一の解決策は、Richfaces に切り替えることでしたが、これは私にとって選択肢ではありません。

継ぎ目あり:

幸いなことに、Seam には独自の組み込み fileUpload-component がありs:fileUploadます。

どちらも機能しませんが、少なくとも、さらに調べる場所を示してくれました。このコンポーネントの doDecode-Methods をデバッグすると、リクエストが MultipartRequest ではないことがわかりました。クレイジーなこと!ファイルのアップロードに使用されるすべてのフォームは、enctype を multipart/form-data として宣言します。ICEfaces コンポーネントを使用しようとしているときにも同じことが起こっていると思います-マルチパートリクエストがなく、リスナーが呼び出されません。

だから:どうすればこれを機能させることができますか?Request が MultipartRequest として入ってこないという点は何ですか? web/components.xml に何か見落としがありますか?

web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xmlns/
javaee/web-app_3_0.xsd"
version="3.0">
<listener>
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>

<filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>Seam Filter</filter-name>
    <url-pattern>*.seam</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/icefaces/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.seam</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Seam Resource Servlet</servlet-name>
    <url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

<context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>com.icesoft.faces.actionURLSuffix</param-name>
    <param-value>.seam</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>-1</param-value>
</context-param>

<context-param>
    <param-name>com.icesoft.faces.synchronousUpdate</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>com.icesoft.faces.doJSFStateManagement</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>com.icesoft.faces.standardRequestScope</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>com.icesoft.faces.uploadDirectory</param-name>
    <param-value>upload</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

components.xml (Seam 2.3 名前空間宣言を省略)

<core:init jndi-pattern="java:app/myApp/#{ejbName}" debug="false"
    distributable="false" />


<component class="org.jboss.seam.transaction.EjbSynchronizations"
    jndi-name="java:app/jboss-seam/EjbSynchronizations" />

<core:manager concurrent-request-timeout="500"
    conversation-timeout="90000000" conversation-id-parameter="cid"
    parent-conversation-id-parameter="pid" />

<web:hot-deploy-filter url-pattern="*.seam" />

<web:multipart-filter create-temp-files="true" 
    max-request-size="1000000" 
    url-pattern="/*"/>


<persistence:managed-persistence-context
    name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/myAppEntityManagerFactory" />

<security:identity authenticate-method="#{authenticator.authenticate}" />
<security:remember-me enabled="true" />

<security:rule-based-permission-resolver
    security-rules="#{securityRules}" />

<drools:rule-base name="securityRules">
    <drools:rule-files>
        <value>/security.drl</value>
    </drools:rule-files>
</drools:rule-base>

<async:quartz-dispatcher />

<factory name="sessionTimeoutSeconds" scope="SESSION"
    value="#{facesContext.externalContext.getSession(true).getMaxInactiveInterval()}" />

<factory name="basePath"
    value="#{facesContext.externalContext.request.scheme}://#{facesContext.externalContext.request.serverName}:
                #{facesContext.externalContext.request.serverPort}#{facesContext.externalContext.request.contextPath}" />

<factory name="contextPath"
    value="#{facesContext.externalContext.request.contextPath}" />

例 JSF ソース (Seam)

<h:form enctype="multipart/form-data">
    <s:decorate>
    <s:fileUpload data="#{uploadBean.fileData}"
        contentType="#{uploadBean.contentType}"
            fileName="#{uploadBean.fileName}" />
    <h:commandButton value="Upload File" type="submit" />
   </s:decorate>
</h:form>

JSF ソースの例 (ICEfaces)

<h:form enctype="multipart/form-data">
    <ace:fileEntry id="file-entry" relativePath="/files/"
            fileEntryListener="#{uploadBean.uploadFile}"
        useSessionSubdir="true" />

    <h:commandButton id="submit" type="submit" value="Send File" />
</h:form>

JSF は Seam コンポーネントにマップし、fileData には byte[] を、fileName と contentType には String を使用します。fileEntryListener は、FileEntryEventを入力として受け取る void メソッドにマップされます。


アップデート

最新情報をお届けするために、これまでの私の調査結果は次のとおりです。

BalusC の答えを考えて、フィルターのことを詳しく調べました。すでに Seam Multipart Filterを 追加/削除しようとしましたが、components.xml に追加して明示的に無効にするとわかりました。

<web:multipart-filter disabled="true"/>

少なくとも ICEfaces で何かが起こっています: FileEntryPhaseListener によって例外がスローされます。

09:26:19,124 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-
localhost-127.0.0.1-8080-2) JSF1071: javax.faces.event.AbortProcessingException erfasst
beforePhase()-Verarbeitung von RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=/
template/patient/documents/instantiation/documentInsertPopup.xhtml @135,98
fileEntryListener="#{uploadBean.fileUploadListener}":
メソッドが見つかりません:
my.company.package.stuff.UploadBean@313d
62f1.fileUploadListener(org.icefaces.ace.component.fileentry.FileEntryEvent)

09:26:19,126 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-
localhost-127.0.0.1-8080-2) /template/upload.xhtml @135,98 fileEntryListener="#
{uploadBean.fileUploadListener}": メソッドが見つかりません:
my.company.package.stuff.UploadBean@313d
62f1.fileUploadListener(org.icefaces.ace.component.fileentry.FileEntryEvent):
javax.faces.event.AbortProcessingException: /upload.xhtml @135,98 fileEntryListener="#
{uploadBean.fileUploadListener}": メソッドが見つかりません:
my.company.package.stuff.UploadBean@313d
62f1.fileUploadListener(org.icefaces.ace.component.fileentry.FileEntryEvent)

    org.icefaces.ace.component.fileentry.FileEntry.broadcast (FileEntry.java:350) で
[icefaces-ace.jar:]
    org.icefaces.ace.component.fileentry.FileEntryPhaseListener$1.visit(FileEntryPhaseListener.java:95) [icefaces-ace.jar:] で
    com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) [javax.faces.jar:2.1.4-FCS] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1612) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIForm.visitTree(UIForm.java:371) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    org.icefaces.ace.component.fileentry.FileEntryPhaseListener.beforePhase(FileEntryPhaseListener.java:100) [icefaces-ace.jar:] で
    com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [javax.faces.jar:2.1.4-FCS] で
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [javax.faces.jar:2.1.4-FCS] で
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [javax.faces.jar:2.1.4-FCS] で
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] で
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] で
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.0.Final] で
    org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) [jboss-seam.jar:2.3.0.Final] で
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] で
    org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] で
    org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] で
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] で
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] で
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] で
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] で
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] で
    java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_06] で

少なくともこれは見るべきものです。次のようにfileEntryListenerを使用すると

fileEntryListener="#{uploadBean.fileUploadListener}"

以下を使用すると、上記の例外がスローされます。

fileEntryListener="#{uploadBean.fileUploadListener()}"

メソッドにはパラメーターが必要であり、次のように使用すると不平を言います。

fileEntryListener="#{uploadBean.fileUploadListener(null)}"

例外はスローされませんが、イベントが null であるため、ファイルは UploadBean に到達しません。いくつかのライブラリの問題のようなにおいがしますが、少なくとも他に注目すべき点があります。

ビーンのアップロード

ここではあまり起こりません。単純に次のとおりです。

@Stateful
@Name("uploadBean")
@Scope(ScopeType.SESSION)
@JndiName(value = "java:app/myApp.jar/UploadBean")
public class UploadBean implements IUploadBean
{
public void fileUploadListener(FileEntryEvent event)
{
    System.out.println("listener called!");
}   
 }

Listener も Bean のインターフェースで宣言されます。

4

4 に答える 4

3

最初にいくつかの技術的背景情報:次のJSF 2.2まで、JSFはmultipart/form-dataリクエストをネイティブにサポートしていません。Filterしたがって、ファイルアップロードコンポーネントを提供するコンポーネントライブラリは、カスタム自体を考え出す必要があります。これにより、リクエストが適切に解析さmultipart/form-dataれ、必要なすべての通常のデータがHTTPリクエストパラメータマップとアップロードされたファイルにリクエスト属性として保存されます。このようにして、JSFはrequest.getParameter()通常の方法で通常のデータを引き続き使用でき、コンポーネントライブラリ自体がアップロードされたファイルをリクエスト属性として取得できます。

Seamの場合、解析ジョブを実行する<s:fileUpload>必要があります。Seam(またはICEfaces)を使用したことはありませんが、Googleは、基本的にWebアプリでこれが必要であることを示しています。org.jboss.seam.web.MultipartFiltermultipart/form-dataweb.xml

<filter>
    <filter-name>Seam Multipart Filter</filter-name>
    <filter-class>org.jboss.seam.web.MultipartFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Seam Multipart Filter</filter-name>
    <url-pattern>*.seam</url-pattern>
</filter-mapping>

またはこれをSeamでcomponents.xml

<web:multipart-filter url-pattern="*.seam" />

ICEfacesコンポーネントには、同様のフィルターを構成する必要があります。ICEfaces 3.xのドキュメントが不足している(または私のGoogle / icefaces.comの検索スキルが悪い)ので、これについて詳しく説明することはできません。

HTTPリクエストは1回しか解析できないため(クライアントは複数回ではなく1回だけ送信します)multipart/form-data、同じリクエストで両方のパーサーを同時に使用することはできないことに注意してください。最初のものの後に開始するものは、意味のあるものに解析できない空の要求本文を取得します。したがって、後者のフィルターを使用しているコンポーネントを使用している場合、モデルには何も取得されません。誤って、または実験によって両方を構成していないことを確認してください。

于 2012-10-24T14:31:14.400 に答える
0

多分それは役立つかもしれません。私がしたことは、私の耳のプロジェクトを戦争として再展開することでした。

web.xmlのマルチパートフィルタリングを削除し、これをcomponents.xmlに追加します。

<web:multipart-filter disabled="true"/>

私のコンポーネントのサンプル:

<ace:panel id="pnl">
        <h:form> 
            <ice:panelGrid columns="2" bgcolor="#0063AA"> 
                <ace:fileEntry id="file-entry" useOriginalFilename="true" immediate="true"
                required="true" requiredMessage="The file is required to submit this form." 
                 fileEntryListener="#{imageHome.sampleListener}"/>
                <h:commandButton  type="submit" value="Upload" />
            </ice:panelGrid>
        </h:form>
    </ace:panel>

私のFileEntryEventが呼び出されました。

于 2013-01-10T10:05:43.933 に答える
0

まだ調査中ですが、こんな感じです。

<web:multipart-filter disabled="true" url-pattern="bleh"/>

テスト ケース components.xml で期待どおりに動作していませんが、

<component class="org.jboss.seam.web.MultipartFilter">
    <property name="disabled">true</property>
</component>

シーム MultipartFilter を無効にするために取り組んでいます。

于 2012-10-30T20:58:00.713 に答える
-1

私は Seam を使用していませんが、JSF Bean として定義した Bean が、あなたが使用しているものとは異なるアノテーションを使用していることに気付きました。

Bean には @ManagedBean を使用します。スコープには、@SessionScoped を使用します。

于 2012-10-30T21:09:41.837 に答える