2011-01-17 5 views
2
DataModel<MyObject> DataModel<MyObject>을 사용하여 this response

JSF : 데이터 변경 후 페이지 새로 고침

에 따라 데이터 테이블을 채 웁니다. 각 행의 끝에 이제는 내 콩의 특정 메소드를 호출하는 삭제 버튼이 있습니다. 데이터가 완전히 삭제됩니다. 그러나 삭제 후에 데이터가 변경되었으므로 변경 사항을 반영하기 위해 페이지를 다시로드하고 싶습니다.

내 시도는 faces-config.xml에 탐색 규칙을 추가하는 것이 었습니다.

개요 /overview.jsp deletedsubscription /overview.jsp

<redirect />이 있거나없는 경우 다시로드하거나 다른 작업을 수행하지 않습니다. 데이터가 삭제되므로 bean의 메소드가 실제로 호출됩니다.

내 단추는 다음과 같습니다.

<h:dataTable border="1" value="#{overviewBean.overviewModel }" var="item" first="0"> 
    <h:column id="column13"> 
     <f:facet name="header"> 
      <h:outputText value="#{messages.overviewDeleteItem }"></h:outputText> 
     </f:facet> 
     <h:commandButton action="#{overviewBean.deleteItem}" value="X"/> 
    </h:column> 
</h:dataTable> 

type="submit" 특성을 설정하면 실제로 문제가 해결됩니다. 페이지가 다시로드됩니다.

지금 내 질문 : 제출 정말 필요합니까? JSF (Apache MyFaces)에는 AJAX를 사용하여 방금 삭제 한 행을 제거하는 몇 가지 메커니즘이 있습니까?

JSF 초보자를 도와 주셔서 감사드립니다.

답변

4

데이터 모델의 백업 목록에서 항목을 제거하기 만하면됩니다. 변경 사항이 모델에 반영됩니다. 기본적으로

는 :

private List<MyObject> overviewList; 
private DataModel overviewModel; 

public OverviewBean() { 
    overviewList = overviewDAO.list(); 
    overviewModel = new ListDataModel(overviewList); 
} 

public void deleteItem() { 
    MyObject myObject = (MyObject) overviewModel.getRowData(); 
    overviewDAO.delete(myObject); 
    overviewList.remove(myObject); // See? 
} 

리디렉션은 이후 필요가 없습니다. 액션 메소드가 void (또는 null)를 반환하면 어쨌든 동일한 페이지로 이동합니다.

JSF 2.0에서는 일반적인 기능이 도입되었지만 틀리지 않은 경우 JSF 1.x를 사용하고 있습니다. 가장 좋은 방법은 Ajax4jsf (현재 RichFaces의 일부)와 같은 타사 구성 요소 라이브러리를 채택하는 것입니다. 필요한 경우 고려해야합니다.

+0

또 다른 좋은 반응입니다. 감사! 글쎄 ... 메소드가 void를 리턴 할 때, Eclipse는 JSP 편집기에서 그것에 대해 불평했다. 다시 시도 할 것이다. – Atmocreations

+0

Eclipse는 얼간이입니다. 무시하고 실행하십시오. 이러한 오류/경고는 구성 가능합니다. 결국'null '을 반환 할 수도 있습니다. – BalusC

+0

Eclipse는 멋집니다 =) JSF의 학습 과정에서 많은 도움을 얻었습니다. 그러나 네, 맞습니다. 때로는 그것이해야 할 것보다 더 많이 불평합니다. 이것은 구현 (Myfaces/Mojarra 또는 호출 방법)에 따라 다를 수 있습니다. 감사! – Atmocreations