2012-09-07 1 views
0

내 파일 업로드 빈 이미지 업로드뿐만 아니라 변경 엔티티의 feild 내가 현재 그래서 여기에 파일 업로드에 내 콩을 업데이트에 어려움을 겪고있다

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}"/> 

간다

@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

더 나은 문제를 설명하면 문제가 없음을 알 수 있습니다. – EmirCalabuch

+0

하드 디스크에 이미지를 업로드하려고합니다. 업로드가 완료되면 텍스트 필드 중 하나에 파일 이름이 있어야합니다. 엔티티 CIOMEMBER에 바인드하는 동일한 페이지로, 업로드 한 파일 이름을 저장할 때 데이터베이스에도 저장됩니다. –

답변

1

첫째, 당신에게 NEVER Seam이 더 이상 Seam 컴포넌트가 아니라면 (Bijection은 작동하지 않습니다.) 인스턴스를 직접 생성하는 대신 Seam이 Component.getInstance("memberHome")으로 처리하거나 Seam 컴포넌트를 삽입하도록 요청할 것이므로 (new CiomemberHome()에서와 같이) 직접 Seam 컴포넌트를 인스턴스화하려고합니다. FileUpload에 있습니다.

문제에 관해서는 파일 이름이 비어 있다고 생각합니다. 이것이 문제라면 richface가 실제로 임시 파일을 만들지는 않지만 메모리에 내용을 가지고 있기 때문입니다. 파일로 업로드 된 데이터를 저장하려면 변경하셔야합니다 web.xml : createTempFiles (기본값이 false) true로 설정되어

<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> 

하는 것으로. 리스너에서 데이터를 검색 할 때 바이트 배열로 item.getData() 대신 File temp = item.getFile()을 사용하면 임시 파일 인스턴스가 반환됩니다.

https://stackoverflow.com/a/7276813/1417546

+0

답변 해 주셔서 감사합니다.하지만 이미지 이름으로 텍스트 필드를 다시 렌더링 할 수 없습니다. 나는 콘솔 형태로 인쇄 할 수 있습니다. –

+0

다음과 같은 오류/메시지가 나타납니다 : –

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 : 도시 [심각도 = (ERROR 2) 개요 = (값이 필요), 세부 = (값이 필요하다) ] sourceId = ciomember : agencyNameField : agencyName [심각도 = (ERROR 2), 요약 = (값 필요), 세부 사항 = (값 필요)] sourceId = ciomember : lastNameField : lastName [심각도 = (오류 2) = (값 필요), detail = (값 필요)] sourceId = ciomember : memberPhotoField : memberPsourceId = ciomember : zipField : zip [severity = (ERROR 2), 요약 = (값이 필요함), detail (세부 사항은 다음과 같습니다) : hoto [severity = (ERROR 2), summary = (값 필요) sourceId = ciomember : stateField : 상태 [심각도 = (ERROR 2), 요약 = (값 필요), 세부 사항 = (값 필요)] sourceId = ciomember : firstNameField : firstName [severity = (심각도 = (오류 2), 요약 = (값 필요), 세부 = sourceId = ciomember : address1Field : address1 [severity = (ERROR 2)] sourceId = ciomember : agencyUrlField : agencyUrl [심각도 = (오류 2), 요약 = (값 필요) , 요약 = (값 필요), 세부 사항 = (값은 필수)]

+0

양식에 'rich : fileUpload' 컨트롤과 함께 다른 필드가있는 것 같습니다. 파일을 제출할 때 전체 양식도 제출해야하며 필수 필드는 유효성 검사를 통과하지 못하므로 사용자가 보는 오류의 원인이됩니다. 'rich : fileUpload' 컨트롤에서'ajaxSingle = true'를 사용해 보거나 별개로 제출하여 다른 필드를 검증 할 필요가 없도록 별도의 폼에 넣으십시오. – EmirCalabuch

+0

감사합니다. 근데 ​​왜 sourceId = null [severity = (INFO 0), summary = (성공적으로 업데이트 됨), detail = (성공적으로 업데이트 됨)] sourceId = null [severity = (INFO 0), summary = (성공적으로 업데이트되었습니다.), detail = (성공적으로 업데이트되었습니다.) –

+0

왜 내 sourceId가 null입니까? 비록 내가 나의 인스턴스를 움켜 잡을지라도. –

0

문제를 신고 해 주셔서 감사합니다. 하지만 현재 인스턴스를 사용하고 조작 할 수 있도록 @Inject를 해당 모달 엔티티에 있어야한다고 생각했습니다. 고맙습니다. :)