2015-01-18 3 views
0

영어로 죄송합니다. 작동하지 않는다 <h:commandLink> with <f:ajax>.JSF 파일 업로드 : commandLink가 아약스와 작동하지 않습니다.

test.xhtml : TestMB

<h:form enctype="multipart/form-data" prependId="false"> 

    <h:inputFile id="file" label="file" value="#{testMB.file}" required="true"> 
     <f:ajax event="blur" render="fileMessage"/> 
    </h:inputFile> 

    <h:message for="file" id="fileMessage" styleClass="message-error"/> 

    <h:outputText value="#{testMB.date}" id="date" /> 

    <h:commandLink action="#{testMB.upload}"> 
     <f:ajax execute="file" render="fileMessage date" /> 
     upload 
    </h:commandLink> 

</h:form> 

등급 :

@ManagedBean(name="testMB") 
@ViewScoped 
public class TestMB { 

    private Part file; 

    public String date; 

    public void upload() { 

     try{ 
      Thread.sleep(Long.valueOf("5000")); 
      this.date = "1111111111111111111"; 
     }catch(Exception ex){ 

     } 
    } 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public Part getFile() { 
     return file; 
    } 

    public void setFile(Part file) { 
     this.file = file; 
    } 

} 

나는 test.xhtml을 열고 파일을 선택합니다. 링크 "업로드"를 클릭하면 전송이 작동하지 않습니다. 다시 클릭하면 링크가 작동하지 않으며이 페이지를 새로 고침해야합니다.

test.xhtml 페이지를 열고 파일을 선택하십시오. 그리고 "빈 공간"을 클릭하여 <f:ajax event="blur" render="fileMessage"/>을 확인합니다. 그리고 "업로드"링크를 클릭하면 전송이 작동합니다.

무엇이 문제입니까? 도와주세요.

+0

[jsf-2]라는 태그가 지정되었습니다. ''을 사용하는 파일 업로드에는 JSF 2.2가 필요하며 Servlet 3.0 (최소 JDK 1.6)이 필요합니다. ''는 제 3 자 라이브러리가 없어도이 서블릿 API (3.0 이상)를 내부적으로 사용하여 파일을 업로드합니다. 어떤 버전의 JSF와 Servlet을 사용합니까? – Tiny

+0

서블릿 3.1.0과 JSF 2.2.4를 사용합니다. –

답변

0

JSF 2.2.4를 JSF 2.2.6으로 업데이트했습니다. 파일을 선택하고 "업로드"링크를 클릭하면 전송이 작동하지 않습니다. 그러나 다시 클릭하면 전송이 작동합니다.

이 변경되었습니다. <f:ajax event="blur" render="fileMessage"/><f:ajax event="change" render="fileMessage"/>으로 변경했습니다. 송신은 첫 번째 클릭으로 작동합니다.

관련 문제