上传图像以及更改Seam Jboss应用程序中的Entity字段

时间:2012-09-07 23:46:55

标签: file jboss upload entity seam

我目前一直在努力在文件上传时更新我的​​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(); 
}

3 个答案:

答案 0 :(得分:1)

首先,你从不想要自己实例化Seam组件(比如在new CiomemberHome()中),因为如果你这样做,它们就不再是Seam组件了(双射不会起作用等等) ),而不是自己创建实例,你要求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

答案 1 :(得分: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 =(ERROR 2),summary =(value is required),detail =(value is required)]    sourceId = ciomember:agencyNameField:agencyName [severity =(ERROR 2),summary =(value is required),detail =(value is required)]     sourceId = ciomember:lastNameField:lastName [severity =(ERROR 2),summary =(value is required),detail =(value is required)]     sourceId = ciomember:memberPhotoField:memberPhoto [severity =(ERROR 2),summary =(value is required),detail =(value is required)]     sourceId = ciomember:zipField:zip [severity =(ERROR 2),summary =(value is required),detail =(value is required)]     sourceId = ciomember:stateField:state [severity =(ERROR 2),summary =(value is required),detail =(value is required)] sourceId = ciomember:firstNameField:firstName [severity =(ERROR 2),summary =(value is required),detail =(value is required)] sourceId = ciomember:titleField:title [severity =(ERROR 2),summary =(value is required),detail =(value is required)] sourceId = ciomember:agencyUrlField:agencyUrl [severity =(ERROR 2),summary =(value is required),detail =(value is required)] sourceId = ciomember:address1Field:address1 [severity =(ERROR 2),summary =(value is required),detail =(value is required)]

答案 2 :(得分:0)

感谢您尝试我的问题。但我想出来我需要在该模态实体上使用@Inject,以便我可以使用当前的实例并对其进行操作。谢谢。 :)