2014-12-18 4 views
0

영어로 죄송합니다. TestMB에서JSF에서 렌더링되지 않는 AJAX

방법 delete :

public String delete(Post post) { 
    getDao().delete(post); 
    return "success"; 
} 

test.xhtml : 내가 링크 "델"을 클릭하면

<h:form id="form1"> 
    <ui:repeat value="#{TestMB.entityList}" var="entityList"> 
     <p> 
      #{entityList.name} 

      <h:commandLink action="#{TestMB.delete(entityList)}"> 
       del 
       <f:ajax render=":form1"/> 
      </h:commandLink> 
     </p> 
    </ui:repeat> 
</h:form> 

페이지가 새로 고쳐지지 않습니다. 다시 클릭하면 페이지가 새로 고침됩니다. 왜?

내가 TestMB에서 새로운 방법 delete 사용하는 경우 :

private String txt1="test"; 

public String delete() { 

    try{ 
     Thread.sleep(Long.valueOf("10000")); 
    }catch(Exception ex){} 

    txt1=""; 

    return ""; 
} 

그리고 새로운 test.xhtml가 :

<h:form id="form1"> 

    #{testMB.txt1} 

    <h:commandLink action="#{testMB.delete}"> 
     del 
     <f:ajax render=":form1"/> 
    </h:commandLink> 
</h:form> 

I 10 초에 링크 "델"하고 페이지 새로 고침을 클릭합니다.

첫 번째 경우에는 왜 작동하지 않습니까?

+0

링크를 클릭하면 페이지가'success.xhtml' (접미사가 무엇이든지 암시 적 탐색으로 표시됨)으로 이동해야합니다. 'TestMB'는 첫 번째 경우에 어색해 보인다. 소문자로 시작해야합니다. 첫 번째 경우에 링크를 클릭하면 해당 작업 메서드가 제대로 호출됩니까? 제대로 호출되면 중간에 오류/예외가없는 한 대상 페이지로 이동해야합니다. – Tiny

+0

Metod'delete'는 첫 번째 경우에 작동하며 db에서 항목을 제거합니다. 글래스 피시 로그에 오류가 표시되지 않습니다. –

답변

0

문제점을 발견했습니다.

public List<Entity> getEntityList() { 

    //if(entityList == null){ 
     entityList=getDao().findAll(getPageRequest()); 
    //} 

    return entityList; 
} 
+0

이것은 무엇입니까? 너는이 미지의 것에 관한 질문에서 아무 것도 언급하지 않았다. – Tiny

+0

왜? 나는''라고 썼습니다. –

+0

글쎄, 실제 문제를 어떻게 해결했는지 상상하기 란 실제로 어렵습니다. 질문 내용과 주어진 대답을 비교하면 아무도 이런 종류의 코드를 작성하면 "* 페이지 새로 고침 *"문제를 해결할 수 없다고 상상해보십시오. 부가 메모로 비즈니스 로직을 getter 메서드로 작성하는 것은 나쁜 습관입니다. Getter 메소드는 본질적으로 여러 번 호출됩니다. 결과적으로,'findAll()'DAO 메소드가 데이터베이스에서 여러 번 실행되는 것은 자연스럽게 비싼 연산 인 SQL 문을 여러 번 발생시키는 DAO 메소드가 여러 번 실행됩니다. – Tiny

관련 문제