0

私は、以前のプログラマーがどこでもコードを複製するプロジェクトに取り組んでいます。一部の JSF コードを変更する必要がありますが、変更をどこにも複製したくありません。もっと良い方法があるはずだと思います。

これがシナリオです。すべて同じページの複数の異なるタブに表示される複数の dataTable があります。各 dataTable は、ID と値/データ ソースが異なることを除いて、すべての点で同じです。これが構築されたのと同じテクノロジーを使用する必要があるため、バージョンなどを変更することはできません。

設定:

  • ウェブスフィア 7
  • Java 1.5
  • JSF1.1
  • トマホーク1.1

dataTable が含まれている場合、dataTable を外部化し、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>
4

1 に答える 1

0

この問題を解決するために、jsf コードをいくつかの jsp ファイルに分割し、必要な場所に挿入しました。

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>
于 2014-05-06T18:58:57.447 に答える