0

我需要能够在一个页面上多次使用相同的下拉列表。我第一次在选择标签上使用“列表”时,它工作正常。相同的列表不会填充我使用它的第二个选择标签。这是详细信息。

在动作类中,我填充了包含填充选择标记所需的值的 ArrayList。

setNames(new SomeDAO().getNames());

在 JSP 中

<s:select list="names"  
id="nameList"
listKey="nameId"
listValue="userName"                      
/>    

这个选择列表填充得很好。如果我在同一页面上使用以下选择标签(使用相同的列表),则无法打印。

<s:select list="names"                                                      
      id="rName"                                 
      listKey="nameId"
      listValue="userName" />

如果我用 #{'test':'test'} (硬编码列表)替换上面的“列表”,则标签显示正常。看起来我在 Action 中设置的属性在第一次使用后被清除。这是发生了什么还是我做错了什么?我收到“IllegalStateException:响应已提交”错误

编辑1:在处理JSP页面的action方法中使用了setNames()。这是一个简单的getter函数。在 JSP 中,这就是我所拥有的。

        <tr>
          <td align="left" class="td-plain">Add New:</td>
          <td class="td-plain">
                    <s:select list="names"  
                              id="addNameID"                                                    
                              name="addUserNameID"
                              listKey="reinsId"
                              listValue="reinsName"                   
                                  headerKey=""
                              headerValue="--User Name--"
                     />
          </td>
          <td class="td-plain"><input id="addTreatyNumber" type="text" /></td>  
          <td class="td-plain"><input id="addReinsPercentage" type="text" /></td>
          <td class="td-plain"><input id="addFlatDollarRetentionAmt" type="text" /></td>            
          <td class="td-plain">
              <%if(finance){ %>
                   <input type="button" class="greyButton" value="Add" onclick="addReinsInfo()"/>
              <%}else{ %>
         None
         <%} %> 
         </td>

     </tr>

然后在那个页面上,我有

<tr id='<s:property value="caseGroupId"/>:<s:property value="treatyId"/>'>
        <td class="td-plain"><input type='checkbox' id='<s:property value="caseGroupId"/>:<s:property value="treatyId"/>'/></td> 
        <td class="td-plain">
                            <s:select list="names"                                                      
                              id="rName"            
                              name="dName"                   
                              listKey="reinsId"
                              listValue="reinsName"                   
                              headerKey=""
                              headerValue="--User Name--"

                             />

        </td>
        <td class="td-plain_"><s:textfield id="tNumber" value="%{treatyNumber}"/></td>           
        <td class="td-plain_"><s:textfield id="tPercentage" value="%{reinspercentage}"/></td>
        <td class="td-plain_"><s:textfield id="rAmount" value="%{flatDollarRetentionAmt}"/></td>                        
       <td class="td-plain"><input type="button" value="Delete" class="greyButton"/></td>   
      </tr>

如果我将第二个标签中的“列表”更改为

list="#{'Test':'Test'}"

标签显示正常。如果我可以提供任何进一步的信息,请告诉我。

编辑 2:我能够通过将下拉列表值设置为会话来使其工作。

4

1 回答 1

0

按照@Dave 和@Quaternion 的要求,发布相关的Java/JSP 代码。

但在那之前...我注意到您没有name在 Struts 中使用属性Select

虽然您可以从不同的标签多次引用同一个源(list属性),但Select要从相同的对象列表中填充,您应该name为每个对象指定不同的,以定义哪个变量(发送回操作)包含其中的选定值Select

这可能不是当前问题的答案,但很快就会出现。

于 2013-03-07T00:27:23.903 回答