2012-04-07 5 views
0

나는 어떻게 매김하고이 테이블 Tomahawk 라이브러리없이 사용할 수 있습니다Tomahawk <t:saveState> 및 <t:dataList> 태그를 표준 JSF 태그로 바꾸는 방법은 무엇입니까?

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
<%@taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<f:view> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <title>Effective datatable paging and sorting at DAO level</title> 
     </head> 
     <body> 
      <h:form id="form"> 

       <%-- The sortable datatable --%> 
       <h:dataTable value="#{myBean.dataList}" var="item"> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="ID" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="id" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.id}" /> 
        </h:column> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="Name" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="name" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.name}" /> 
        </h:column> 
        <h:column> 
         <f:facet name="header"> 
          <h:commandLink value="Value" actionListener="#{myBean.sort}"> 
           <f:attribute name="sortField" value="value" /> 
          </h:commandLink> 
         </f:facet> 
         <h:outputText value="#{item.value}" /> 
        </h:column> 
       </h:dataTable> 

       <%-- The paging buttons --%> 
       <h:commandButton value="first" action="#{myBean.pageFirst}" 
        disabled="#{myBean.firstRow == 0}" /> 
       <h:commandButton value="prev" action="#{myBean.pagePrevious}" 
        disabled="#{myBean.firstRow == 0}" /> 
       <h:commandButton value="next" action="#{myBean.pageNext}" 
        disabled="#{myBean.firstRow + myBean.rowsPerPage >= myBean.totalRows}" /> 
       <h:commandButton value="last" action="#{myBean.pageLast}" 
        disabled="#{myBean.firstRow + myBean.rowsPerPage >= myBean.totalRows}" /> 
       <h:outputText value="Page #{myBean.currentPage}/#{myBean.totalPages}" /> 
       <br /> 

       <%-- The paging links --%> 
       <t:dataList value="#{myBean.pages}" var="page"> 
        <h:commandLink value="#{page}" actionListener="#{myBean.page}" 
         rendered="#{page != myBean.currentPage}" /> 
        <h:outputText value="<b>#{page}</b>" escape="false" 
         rendered="#{page == myBean.currentPage}" /> 
       </t:dataList> 
       <br /> 

       <%-- Set rows per page --%> 
       <h:outputLabel for="rowsPerPage" value="Rows per page" /> 
       <h:inputText id="rowsPerPage" value="#{myBean.rowsPerPage}" size="3" maxlength="3" /> 
       <h:commandButton value="Set" action="#{myBean.pageFirst}" /> 
       <h:message for="rowsPerPage" errorStyle="color: red;" /> 

       <%-- Cache bean with data list, paging and sorting variables for next request --%> 
       <t:saveState value="#{myBean}" /> 
      </h:form> 
     </body> 
    </html> 
</f:view> 

분류와 JSF 테이블을 만드는 방법을 보여줍니다 this JSF 튜토리얼을 발견? 최대한 깨끗한 JSF를 사용하고 싶습니까? 페이징 및 정렬을 변경하지 않고 표준 JSF 태그만으로이 코드를 편집 할 수 있습니까?

가장 오래된 문서는 JSF의 1.x에서에 대상이되는 것을

답변

3

소원과 코드는 요청이 빈을 범위로 사용하기위한 것입니다. <t:saveState>은 새 JSF 2.x 뷰 범위와 똑같은 요청 POST 범위에서 요청 범위 Bean이 유지되는지 확인합니다 (따라서 표준 JSF 1.x에는 아직 존재하지 않음). 세션 범위는 직관적이지 않은 동작으로 이어질 수 있기 때문에 옵션이 아닙니다. "wtf?" 최종 사용자가 여러 브라우저 창/탭에서 매우 동일한 페이지를 열 때 상황에 따라 요청 기반 동작이 다른 창/탭의 동일한 페이지 동작에 영향을 미칩니다. .

JSF 2.x의 경우 @ViewScoped을 표시하여 요청 범위 대신보기 범위에 bean을 넣는 것만으로 <t:saveState>을 대체 할 수 있습니다.

@ManagedBean 
@ViewScoped 
public class MyBean { 
    // ... 
} 

또한 이전 JSP보기 기술을 사용하고 있습니다. 이것은 JSF 2.0 이후 Facelets에 의해 성공되었습니다. Facelets로 JSP를 대체하고 싶습니다. 최상위 레벨 태그 (<html> 태그)의 일반 XML 네임 스페이스 선언을 사용하여 해당 JSP taglib을 제거하고 파일 이름을 .jsp에서 .xhtml으로 바꿉니다. 이 방법을 사용하면 <t:dataList><ui:repeat>으로 바꿀 수 있습니다. 이는 JSP에 없습니다.

<ui:repeat value="#{myBean.pages}" var="page"> 
    ... 
</ui:repeat> 
+1

좋아요. 나중에 @ViewScoped 만 사용하겠습니다. 나는 더 구체적 일 것이다. 어떻게이 코드 http://pastebin.com/ExLrdX3u를 h 라이브러리 태그로 대체 할 수 있는가? 최종 결과를 변경하지 않고 t 라이브러리 태그를 h 라이브러리로 대체하려고한다. –

+2

오, 나는 ''을 놓쳤다. 나는 대답을 업데이트했다. – BalusC

+0

로 대체하거나 다른 태그를 사용해야합니까? –