2014-04-22 32 views
0

전 프로그래머가 코드를 복제하는 프로젝트를 진행 중입니다. 일부 JSF 코드를 변경해야하지만 변경 사항을 어디서나 복제하고 싶지는 않습니다. 나는 더 좋은 방법이 있어야한다고 생각한다.JSF 1.1 DataTable Reuse

다음은 시나리오입니다. 한 페이지에 여러 개의 다른 탭에 표시되는 여러 개의 dataTable이 있습니다. 각 dataTable은 ID와 값/데이터 소스가 다른 것을 제외하고는 모든면에서 동일합니다. 이 버전이 빌드 ​​된 것과 동일한 기술을 사용해야하므로 버전 등을 변경할 수 없습니다.

설정 :

  • 스피어 7
  • 자바 1.5
  • JSF 1.1
  • 토마 호크 1.1

나는 데이터 테이블을 구체화하고, ID와 값 데이터 테이블을 정의 할 수있는 방법 포함되어 있습니까? 그렇게하면 각 테이블마다 동일한 변경을 여러 번 할 필요가 없습니다.

각 Edit.jsp 페이지에 아래의 dataTable이 포함 된 탭 패널.

<odc:tabbedPanel id="sampleTab" styleClass="tabbedPanel_3" 
    slantActiveRight="4" slantActiveLeft="4" slantInactiveRight="4" 
    slantInactiveLeft="4" width="100%" height="100%" 
    variableTabLength="true" showBackNextButton="true" showTabs="true"> 

    <!-- Start Test panel --> 
    <odc:bfPanel id="testsDisplayPanel" name="IPA" 
     showFinishCancelButton="false"> 
     <jsp:include flush="true" page="editHeader.jsp" /> 
     <jsp:include flush="true" page="testEdit.jsp" /> 
    </odc:bfPanel> 

    <!-- Start Elisa panel --> 
    <odc:bfPanel id="elisaDisplayPanel" name="ELISA" 
     showFinishCancelButton="false"> 
     <jsp:include flush="true" page="editHeader.jsp" /> 
     <jsp:include flush="true" page="elisaEdit.jsp" /> 
    </odc:bfPanel> 

    <!-- Start NMO Tests panel --> 
    <odc:bfPanel id="nmoDisplayTestPanel" name="NMO IF" 
     showFinishCancelButton="false"> 
     <jsp:include flush="true" page="editHeader.jsp" /> 
     <jsp:include flush="true" page="nmoTestEdit.jsp" /> 
    </odc:bfPanel> 

    <!-- Start IF Tests panel --> 
    <odc:bfPanel id="ifDisplayTestsPanel" name="PNEO IF" 
     showFinishCancelButton="false" > 
     <jsp:include flush="true" page="editHeader.jsp" /> 
     <jsp:include flush="true" page="ifTestEdit.jsp" /> 
    </odc:bfPanel> 


    <f:facet name="back"> 
     <hx:commandExButton id="tabbedPanel1back" style="display:none" 
      type="submit" value="&lt; Back" /> 
    </f:facet> 
    <f:facet name="next"> 
     <hx:commandExButton id="tabbedPanel1next" style="display:none" 
      type="submit" value="Next &gt;" /> 
    </f:facet> 
    <f:facet name="finish"> 
     <hx:commandExButton id="tabbedPanel1finish" style="display:none" 
      type="submit" value="Finish" /> 
    </f:facet> 
    <f:facet name="cancel"> 
     <hx:commandExButton id="tabbedPanel1cancel" style="display:none" 
      type="submit" value="Cancel" /> 
    </f:facet> 
</odc:tabbedPanel> 

표 예 (나는 그것을 단축, 정말 20 열이 있습니다.)

<h:dataTable id="elisaTestResults" styleClass="data-entry" 
    value="#{pc_SampleEdit.sample.test.elisaTestResults}" var="elisaTestResults" border="0" 
    cellpadding="0" cellspacing="0" rowClasses="none, grey-highlight"> 

    <!-- hidden input column --> 
    <h:column> 
     <h:inputHidden value="#{elisaTestResults.testResultsIk}" /> 
     <h:inputHidden value="#{elisaTestResults.test.testIk}" /> 
     <h:inputHidden value="#{elisaTestResults.dirty}" id="mustSaveT1" /> 
    </h:column> 

    <!-- Ordered column --> 
    <h:column id="testResultsOrderedCol"> 
     <f:facet name="header"> 
      <h:outputText id="ot01" styleClass="outputText" value="" /> 
     </f:facet> 
     <h:selectOneMenu id="ordered" styleClass="selectOneMenu" 
      rendered="#{elisaTestResults.ordered != null}" 
      value="#{elisaTestResults.ordered}" 
      onchange="setDirty(this, 'T1')" 
      converter="javax.faces.convert.IntegerConverter"> 
      <f:selectItems value="#{pc_UtilRefLists.ordered}" /> 
     </h:selectOneMenu> 
    </h:column> 

    <!-- Test Name Column --> 
    <h:column id="testResultsTestNameCol"> 
     <f:facet name="header"> 
      <h:outputText id="ot02" styleClass="outputText" value="Test Name" /> 
     </f:facet> 
     <h:outputText id="testResultsTestName" style="font-weight: bold" 
      value="#{elisaTestResults.testName}" /> 
    </h:column> 

    <!-- Result1 Column --> 
    <h:column id="testResultsResult1Col"> 
     <f:facet name="header"> 
      <h:outputText id="ot03" styleClass="outputText" value="Result1" /> 
     </f:facet> 
     <t:inputText id="testResultsResult1" style="font-weight: bold" 
      value="#{elisaTestResults.result1}" size="7" maxlength="15" 
      onchange="setTestDate(this, 'T1')" 
      displayValueOnly="#{elisaTestResults.valid1 != null && elisaTestResults.valid1}" 
      displayValueOnlyStyleClass="outputText"/>  
    </h:column> 

    <!-- Date1 Column --> 
    <h:column id="testResultsDate1Col"> 
     <f:facet name="header"> 
      <h:outputText id="ot04" styleClass="outputText" value="Date" /> 
     </f:facet> 
     <h:panelGroup rendered="#{!elisaTestResults.valid1}"> 
      <h:inputText id="testResultsDate1__DT" styleClass="inputText" 
       value="#{elisaTestResults.date1}" 
       onchange="setDirty(this, 'T1')" 
       size="7"> 
       <f:convertDateTime type="date" pattern="MM/dd/yyyy" /> 
      </h:inputText> 
      <hx:graphicImageEx id="testResultsDate1__DTCal" 
      styleClass="graphicImageEx" value="/shared/images/schedule.gif" /> 
      <h:message styleClass="error-message" for="testResultsDate1__DT" /> 
     </h:panelGroup> 
     <h:outputText id="testResultsDate1" styleClass="outputText" 
      value="#{elisaTestResults.date1}" rendered="#{elisaTestResults.valid1}"> 
      <f:convertDateTime type="date" pattern="MM/dd/yyyy" /> 
     </h:outputText> 
    </h:column> 

    <!-- Valid Result1 Column --> 
    <h:column id="testResultsValid1Col"> 
     <f:facet name="header"> 
      <h:outputText id="ot05" styleClass="outputText" value="OK" /> 
     </f:facet> 
     <h:selectBooleanCheckbox id="testResultsValid1" 
      onchange="setDirty(this, 'T1')" 
      styleClass="selectBooleanCheckbox" value="#{elisaTestResults.valid1}" /> 
    </h:column> 

    <!-- Result2 Column --> 
    <h:column id="testResultsResult2Col"> 
     <f:facet name="header"> 
      <h:outputText id="ot06" styleClass="outputText" value="Result2" /> 
     </f:facet> 
     <t:inputText id="testResultsResult2" style="font-weight: bold" 
      value="#{elisaTestResults.result2}" size="7" maxlength="15" 
      onchange="setTestDate(this, 'T1')" 
      displayValueOnly="#{elisaTestResults.valid2 != null && elisaTestResults.valid2}" 
      displayValueOnlyStyleClass="outputText"/>  
    </h:column> 

</h:dataTable> 

답변

0

내가 여러 JSP 파일에 JSF 코드를 돌파하고 필요한 경우이를 삽입이 문제를 해결하기 위해.

dataTableElisa.jsp

<h:dataTable id="elisaTestResults" styleClass="data-entry" 
    value="#{pc_SampleEdit.sample.test.elisaTestResults}" var="elisaTestResults" border="0" 
    cellpadding="0" cellspacing="0" rowClasses="none, grey-highlight"> 

    <jsp:include flush="true" page="innerTable.jsp"/> 

</h:dataTable> 

dataTableNmo.jsp

<h:dataTable id="nmoTestResults" styleClass="data-entry" 
    value="#{pc_SampleEdit.sample.test.nmoTestResults}" var="elisaTestResults" border="0" 
    cellpadding="0" cellspacing="0" rowClasses="none, grey-highlight"> 

    <jsp:include flush="true" page="innerTable.jsp"/> 

</h:dataTable> 

innerTable.jsp

<!-- hidden input column --> 
<h:column> 
    <h:inputHidden value="#{elisaTestResults.testResultsIk}" /> 
    <h:inputHidden value="#{elisaTestResults.test.testIk}" /> 
    <h:inputHidden value="#{elisaTestResults.dirty}" id="mustSaveT1" /> 
</h:column> 

<!-- Ordered column --> 
<h:column id="testResultsOrderedCol"> 
    <f:facet name="header"> 
     <h:outputText id="ot01" styleClass="outputText" value="" /> 
    </f:facet> 
    <h:selectOneMenu id="ordered" styleClass="selectOneMenu" 
     rendered="#{elisaTestResults.ordered != null}" 
     value="#{elisaTestResults.ordered}" 
     onchange="setDirty(this, 'T1')" 
     converter="javax.faces.convert.IntegerConverter"> 
     <f:selectItems value="#{pc_UtilRefLists.ordered}" /> 
    </h:selectOneMenu> 
</h:column> 

<!-- Test Name Column --> 
<h:column id="testResultsTestNameCol"> 
    <f:facet name="header"> 
     <h:outputText id="ot02" styleClass="outputText" value="Test Name" /> 
    </f:facet> 
    <h:outputText id="testResultsTestName" style="font-weight: bold" 
     value="#{elisaTestResults.testName}" /> 
</h:column> 

<!-- Result1 Column --> 
<h:column id="testResultsResult1Col"> 
    <f:facet name="header"> 
     <h:outputText id="ot03" styleClass="outputText" value="Result1" /> 
    </f:facet> 
    <t:inputText id="testResultsResult1" style="font-weight: bold" 
     value="#{elisaTestResults.result1}" size="7" maxlength="15" 
     onchange="setTestDate(this, 'T1')" 
     displayValueOnly="#{elisaTestResults.valid1 != null && elisaTestResults.valid1}" 
     displayValueOnlyStyleClass="outputText"/>  
</h:column> 

<!-- Date1 Column --> 
<h:column id="testResultsDate1Col"> 
    <f:facet name="header"> 
     <h:outputText id="ot04" styleClass="outputText" value="Date" /> 
    </f:facet> 
    <h:panelGroup rendered="#{!elisaTestResults.valid1}"> 
     <h:inputText id="testResultsDate1__DT" styleClass="inputText" 
      value="#{elisaTestResults.date1}" 
      onchange="setDirty(this, 'T1')" 
      size="7"> 
      <f:convertDateTime type="date" pattern="MM/dd/yyyy" /> 
     </h:inputText> 
     <hx:graphicImageEx id="testResultsDate1__DTCal" 
     styleClass="graphicImageEx" value="/shared/images/schedule.gif" /> 
     <h:message styleClass="error-message" for="testResultsDate1__DT" /> 
    </h:panelGroup> 
    <h:outputText id="testResultsDate1" styleClass="outputText" 
     value="#{elisaTestResults.date1}" rendered="#{elisaTestResults.valid1}"> 
     <f:convertDateTime type="date" pattern="MM/dd/yyyy" /> 
    </h:outputText> 
</h:column> 

<!-- Valid Result1 Column --> 
<h:column id="testResultsValid1Col"> 
    <f:facet name="header"> 
     <h:outputText id="ot05" styleClass="outputText" value="OK" /> 
    </f:facet> 
    <h:selectBooleanCheckbox id="testResultsValid1" 
     onchange="setDirty(this, 'T1')" 
     styleClass="selectBooleanCheckbox" value="#{elisaTestResults.valid1}" /> 
</h:column> 

<!-- Result2 Column --> 
<h:column id="testResultsResult2Col"> 
    <f:facet name="header"> 
     <h:outputText id="ot06" styleClass="outputText" value="Result2" /> 
    </f:facet> 
    <t:inputText id="testResultsResult2" style="font-weight: bold" 
     value="#{elisaTestResults.result2}" size="7" maxlength="15" 
     onchange="setTestDate(this, 'T1')" 
     displayValueOnly="#{elisaTestResults.valid2 != null && elisaTestResults.valid2}" 
     displayValueOnlyStyleClass="outputText"/>  
</h:column>