我目前一直在努力在文件上传时更新我的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();
}
答案 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()
,它将返回临时文件实例。
答案 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,以便我可以使用当前的实例并对其进行操作。谢谢。 :)