如何使用一对多关系从一个表中获取两个列表

时间:2012-10-03 14:22:13

标签: spring hibernate jsp jstl

我有一张名为RR的表。其中将有两组值。我的桌子是

CREATE TABLE "TSL_RR_CONFIGURATION"
  (
    "ID"                       NUMBER(19,0),
    "TRK_TYPE"                 VARCHAR2(2 BYTE),
    "MEASURE_SYSTEM"           VARCHAR2(1 BYTE),
    "MIN_LENGTH"               NUMBER,
    "MAX_LENGTH"               NUMBER,
    "MIN_WIDTH"                NUMBER,
    "MAX_WIDTH"                NUMBER,
    "MIN_HEIGHT"               NUMBER,
    "MAX_HEIGHT"               NUMBER,
    "MIN_WEIGHT"               NUMBER,
    "MAX_WEIGHT"               NUMBER,
    "LOCATION_ID"              NUMBER(19,0),
    "IDX"                      NUMBER DEFAULT 0,
    "INSERTTIME" TIMESTAMP (6),
    "UPDATETIME" TIMESTAMP (6),
    CONSTRAINT "TSL_RR_CONFIGURATION_LOCA_FK1" FOREIGN KEY ("LOCATION_ID") REFERENCES "LOCATION" ("ID") ENABLE
  )

使用Hibernate一对多关系:以下是我映射列表的代码

<list name="revRecov" table="TSL_RR_CONFIGURATION" cascade="all" access="field">
            <key column="LOCATION_ID"  />
            <index column="idx" />
            <one-to-many class="RevRecovery" />
        </list>

使用spring form标签以JSP形式显示:

    <c:forEach items="${location.revRecov}" var="item" varStatus="loop">
                <c:choose>          
                    <c:when test="${measureSys}">
                     <tr> <td><form:input path="revRecov[${loop.index}].trkType" /></td></tr>
                        <tr>
                            <td>Max Length: 
                                <form:input path="revRecov[${loop.index}].maxLength" size="15" maxlength="14" />inches</td>
                            <td>Min Length: 
                                <form:input path="revRecov[${loop.index}].minLength" size="15" maxlength="14" />inches</td> 
                            </tr>
                             </c:when>
                             <c:otherwise>
                              <tr> <td><form:input path="revRecov[${loop.index}].trkType" /></td></tr>
                      <tr><td>Max Length: 
                       <form:input path="revRecov[${loop.index}].maxLength" size="15" maxlength="14" />cm</td>
                      <td>Min Length: 
                      <form:input path="revRecov[${loop.index}].minLength" size="15" maxlength="14" />cm</td></tr>
                   </c:otherwise>
                 </c:choose>
     </c:foreach>

使用<c:when test>标记显示以英寸或厘米为单位的值。我的列表的值类似于

"97" "120" "5"
"12" "400" "1"

如果是97,我必须将标签显示为包装,对于12,我应该有托盘。即使我验证它会有问题,因为这两行都将具有不同的Max和Min值集。

所以,我在想,如果我可以将该列表分成两个不同的列表,然后将其传递给JSP,我也可以进行验证。

实现它的最佳方案是什么?如果我将它们分成两部分,那么当我将它们保存到数据库时会出现问题吗?

非常感谢任何建议?

编辑:在我的情况下,它解决了JSP中不同集合的问题,但它仍然在验证一个问题,如果我有超过2行,我不能使用索引在JSP中为所有行显示它们

1 个答案:

答案 0 :(得分:0)

求助:我可以使用行的索引在JSP中显示为不同的集合 而不是:<form:input path="revRecov[${loop.index}].maxLength" size="15" maxlength="14" />inches</td>

使用了这个:

<form:input path="revRecov[0].maxLength" size="15" maxlength="14" />inches</td>
<form:input path="revRecov[1].maxLength" size="15" maxlength="14" />inches</td>