0

現在、ファイルのアップロードで Bean を更新するのに苦労しています

memberEdit.xhtml

<rich:fileUploadfileUploadListener="#{FileUpload.listener}"
              maxFilesQuantity="1" id="upload"  immediateUpload="false"
                acceptedTypes="jpg, gif, png, bmp, jpeg"allowFlash="false">
                <a4j:supportevent="onuploadcomplete"reRender="memberPhotoField"/>
            </rich:fileUpload>

<s:decorateid="memberPhotoField"template="layout/edit.xhtml">
<ui:definename="label">Member photo</ui:define>
<h:inputTextareaid="memberPhoto"cols="80"rows="3"
required="true"value="#{memberHome.instance.memberPhoto}"/> 

マイ ファイル アップロード Bean

@Name ("FileUpload")
//getters setters
    public void listener(UploadEvent event) throws Exception{
         memberHome memberinstance = new CiomemberHome(); 
        //After copying file on hard disk need to update my text field with filename
         memberinstance.setphoto(item.getFileName());
       // I do get logs correct for item.getFilename
}

マイ ホーム エンティティ

@Name("memberHome")
//getter setters....
public void setphoto(String image)
{
        log.info("In method set photo");
        getInstance().setMemberPhoto(image);
        update(); 
}
4

3 に答える 3

1

まず第一に、Seam コンポーネントを ( のように) 自分でインスタンス化することは絶対new CiomemberHome()に避けてください。インスタンス化すると、それらはもはや Seam コンポーネントではなくなります (バイジェクションが機能しなくなるなど)。Component.getInstance("memberHome")FileUploadでそれを使用または注入します。

あなたの問題に関しては、ファイル名が空であることだと思います。これが問題である場合、その理由は、richfaces が実際に一時ファイルを作成しているのではなく、コンテンツがメモリにあるためです。アップロードされたデータをファイルに保存するには、以下を変更する必要がありますweb.xml

<filter>
    <filter-name>Seam Filter</filter-name>
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
    <init-param>
        <param-name>createTempFiles</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>maxRequestSize</param-name>
        <param-value>10000000</param-value>
    </init-param>
</filter>

createTempFilesに設定されていることに注意してくださいtrue(デフォルトは false)。リスナーでデータを取得するときはitem.getData()、バイト配列を使用する代わりにFile temp = item.getFile()、一時ファイル インスタンスを返します。

https://stackoverflow.com/a/7276813/1417546を参照してください。

于 2012-09-10T16:17:58.637 に答える
0

私の問題を試してくれてありがとう。しかし、現在のインスタンスを使用して操作できるように、そのモーダル エンティティに @Inject が必要であることがわかりました。ありがとうございました。:)

于 2013-01-23T16:27:56.553 に答える
0

エラー/メッセージ

13:49:42,540 INFO  [FileUploadBean] result of persist: updated
13:49:42,613 INFO  [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have       been displayed.
sourceId=null[severity=(INFO 0), summary=(Successfully updated), detail=(Successfully updated)]
sourceId=null[severity=(INFO 0), summary=(Successfully updated), detail=(Successfully updated)]
sourceId=ciomember:officePhoneField:officePhone[severity=(ERROR 2), summary=(value is required), detail=(value is required)]

sourceId=ciomember:cityField:city[severity=(エラー 2), summary=(値が必要です), detail=(値が必要です)] sourceId=ciomember:agencyNameField:agencyName[severity=(エラー 2), summary=(値が必要です), detail=(値が必要です)] sourceId=ciomember:lastNameField:lastName[severity=(エラー 2), summary=(値が必要です), detail=(値が必要です)] sourceId=ciomember:memberPhotoField:memberPhoto [重大度=(エラー 2)、要約=(値が必要です)、詳細=(値が必要です)] sourceId=ciomember:zipField:zip[重大度=(エラー 2)、要約=(値が必要です)、詳細=(値が必要です)] sourceId=ciomember:stateField:state[severity=(エラー 2)、summary=(値が必要です)、detail=(値が必要です)] sourceId=ciomember:firstNameField:firstName[severity=(エラー 2) , summary=(値が必要です),detail=(値が必要です)] sourceId=ciomember:titleField:title[severity=(エラー 2), summary=(値が必要です), detail=(値が必要です)] sourceId=ciomember:agencyUrlField:agencyUrl[severity=( ERROR 2), summary=(値が必要です), detail=(値が必要です)] sourceId=ciomember:address1Field:address1[severity=(エラー 2), summary=(値が必要です), detail=(値が必要です) ]

于 2012-09-10T20:51:49.560 に答える