首页 > 解决方案 > Struts 2(在 jsp 的迭代器之外使用 Select 会导致逗号附加在选择值上而不是重置它)

问题描述

我在将一些 struts 1 代码迁移到 struts 2 时遇到问题。在这种情况下,不是为 deptIdFromGrid 变量选择一个值,而是每个迭代元素的值都附加到变量上。这在 struts one 中是一个完美的工作案例,并且 java pojo 类也没有引起任何我已经验证过的问题。(getter 和 setter 正确就位)

这是我看到的异常,在'class com.bofa.gems.controller.action.UserRoleAction'上设置'searchUser.deptIdFromGrid'时出现意外异常:错误设置表达式'searchUser.deptIdFromGrid'的值为['-1','-1 '、'-1'、'-1'、'-1'、''、'-1'、'-1'、]

代码片段

<select name="searchUser.deptIdFromGrid" id="departmentL<s:property value="%{#count.index}"/>" styleClass="smallselectfordept"
       onKeyDown="javascript:keydownEvent()" onmouseover="onchangeShowTitle(this)"style="width: 250px">

                          <option value="-1" >Select One</option>
                    <s:iterator var="departmentL" value="deptListInGrid">

                    <s:if test="%{searchUser.deptId==#departmentL.id}">
                          <option
                          title='<s:property value="{#departmentL.value}"/>'
                        label='<s:property value="{#departmentL.value"/>'
                          value='<s:property value="{#departmentL.id"/>'
                    selected="selected"><s:property value="{#departmentL.value}" /></option>
                    </s:if>
                          <s:else>
                          <option
                    title='<s:property value="{#departmentL.value}"/>'
                    label='<s:property value="{#departmentL.value"/>'
                    value='<s:property value="{#departmentL.id"/>'
                    ><s:property value="{#departmentL.value}" /></option>
                    </s:else>
                    </s:iterator>
                    </select>
                    </td>
               </s:if>

             <s:else>
             <s:hidden name="searchUser.deptIdFromGrid" value=""></s:hidden>
             <td class="generaltext"><span><s:property value="%{#users.deptName}"/></span></td>
       </s:else>

Struts 1 等效代码

<html:select property="searchUser.deptIdFromGrid" styleId='<%="departmentL"+count%>' styleClass="smallselectfordept" onKeyDown="javascript:keydownEvent()" onmouseover="onchangeShowTitle(this)">
                                                    <html:option value="-1" >Select One</html:option>
                                                    <%-- <html:optionsCollection    name="UserRoleForm" property="departmentList" label="value" value="id" />  --%> 
                                                        <logic:iterate id="departmentL" name="UserRoleForm"
                                                                        property="deptListInGrid">
                                                                        <bean:define id="selectedId" name="departmentL" property="id" />
                                                                        <logic:equal name="UserRoleForm" property="searchUser.deptId"
                                                                            value="<%=(String)selectedId %>">
                                                                            <option
                                                                                title="<bean:write name="departmentL" property="value"/>"
                                                                                label="<bean:write name="departmentL" property="value"/>"
                                                                                value="<bean:write name="departmentL" property="id"/>"
                                                                                selected="selected"><bean:write name="departmentL"
                                                                                property="value" /></option>
                                                                        </logic:equal>
                                                                        <logic:notEqual name="UserRoleForm" property="searchUser.deptId"
                                                                            value="<%=(String)selectedId %>">
                                                                            <option
                                                                                title="<bean:write name="departmentL" property="value"/>"
                                                                                label="<bean:write name="departmentL" property="value"/>"
                                                                                value="<bean:write name="departmentL" property="id"/>"><bean:write
                                                                                name="departmentL" property="value" /></option>
                                                                        </logic:notEqual>
                                                                    </logic:iterate>
                                                    </html:select>

标签: javajspstruts2struts

解决方案


推荐阅读