表格问题:选择,选择所有标签

时间:2012-01-28 11:44:00

标签: spring spring-mvc

我使用spring 3 JSP tab lib来生成HTML。我有一个带有以下代码的选择框 -

<form:select path="categoryList" multiple="false">
                <form:option value="" label="--" selected="selected"/>
                <form:options items="${categoryList}" itemValue="catId" itemLabel="catName"/>
            </form:select>  

生成HTML是 -

    <select id="categoryList" name="categoryList">
<option selected="selected" value="">--</option>
<option value="1" selected="selected">S</option>
<option value="2" selected="selected">Ster</option>
<option value="3" selected="selected">ice</option>
<option value="4" selected="selected">Cees</option>
</select>

问题是生成的所有选项都已选中=“已选择”,这使得在页面上选择“Cees”而不是“ - ”。有人可以告诉我哦,要解决这个问题吗?

完整页面 -

    <form:form modelAttribute="productManagerVO" name="productManager" id="productManager">
    <jsp:directive.include file="../common/header.jsp" />
    <div class="MainDiv">
        <div class="ManagerHeadline">Product Manager</div>      
            <table cellspacing="2px" cellpadding="0" width="100%">
                <tr>
                <td width="100%">
                    <fieldset>
                        <legend class="checkoutlegend">Category Information</legend>
                        <table align="left" id="addCategoryTable">
                        <tr><td><input type="button" id="addCat" value="Add New Category" /></td></tr>
                        </table>
                        <c:if test="${not empty productManagerVO.categoryList}">
                            <table cellspacing="2px" cellpadding="0" class="timeTable" id="categoryTable">
                                <th>Name</th>
                                <th>Order</th>
                                <th>Active</th>
                                <th>&#160;</th>
                                <c:forEach var="categoryListVO" items="${productManagerVO.categoryList}" varStatus="item">
                                <tr>
                                    <td><c:out value="${categoryListVO.catName}" /></td>
                                    <td><c:out value="${categoryListVO.catOrder}" /></td>                                   
                                    <td><c:if test="${categoryListVO.categoryActive}">Yes</c:if>
                                    <c:if test="${!categoryListVO.categoryActive}">No</c:if>
                                    </td>
                                    <td><a href="#editCategory" id="cat"  onclick="editCategoryData('${categoryListVO.catId}')">edit</a></td>
                                </tr>
                                </c:forEach>
                            </table>
                        </c:if>
                    </fieldset>
                </td>
                </tr>
                <tr>
                <td width="100%">
                    <fieldset>
                        <legend class="checkoutlegend">Product Information</legend> 
                            <table align="left" id="addProductTable">
                                <tr>
                                    <td><input type="button" id="addPro" value="Add New Product"/></td>
                                </tr>
                            </table>                    
                             <table cellspacing="2px" cellpadding="0" class="timeTable" id="productTable">
                             <col width="10%" />
                             <col width="7%" />
                             <col width="40%" />
                             <col width="10%" />
                             <col width="5%" />
                             <col width="6%" />
                             <col width="7%" />
                             <col width="10%" />
                             <col width="5%" />

                             <tr>
                                <th>Name</th>
                                <th>Subname</th>
                                <th>Description</th>
                                <th>Veg</th>    
                                <th>Spicy</th>
                                <th>Is Active</th>  
                                <th>Price</th>  
                                <th>Category</th>   
                                <th>&#160;</th> 
                            </tr>
                            <c:if test="${not empty productManagerVO.productList}">
                                <c:forEach var="productListVO" items="${productManagerVO.productList}" varStatus="item">
                                    <tr>
                                    <td><c:out value="${productListVO.fName}" /></td>
                                        <td><c:out value="${productListVO.fSubname}" /></td>
                                        <td><c:out value="${productListVO.fDesc}" /></td>
                                        <td><c:if test="${productListVO.fVeg}">Yes</c:if>
                                            <c:if test="${!productListVO.fVeg}">No</c:if></td>
                                        <td><c:if test="${productListVO.fSpicy}">Yes</c:if>
                                            <c:if test="${!productListVO.fSpicy}">No</c:if></td>
                                        <td><c:if test="${productListVO.fActive}">Yes</c:if>
                                            <c:if test="${!productListVO.fActive}">No</c:if></td>
                                        <td><c:out value="${productListVO.fPrice}" /></td>
                                        <td><c:out value="${productListVO.categoryName}" /></td>
                                        <td><a id="product" href="#editProduct" onclick="editProductData('${productListVO.fId}')">edit</a></td>
                                    </tr>
                                </c:forEach>
                            </c:if>
                             </table>
                    </fieldset>
                </td>
                </tr>
            </table>
        </div>
<div style="display:none">
    <div id="addCategory">
            <table cellspacing="2px" cellpadding="0" class="adminTable" style="border:1px solid #dadada;">
                <tr>
                    <td style="font-weight:bold;">Category Name</td>
                    <td><input type="text" id="caddName" /></td>                
                </tr>                   
                <tr>                
                    <td style="font-weight:bold;">Category Description</td>
                    <td><input type="text" id="caddDesc" /></td>    
                </tr>
                <tr>                
                    <td style="font-weight:bold;">Category Order</td>
                    <td><input type="text" id="caddOrder" /></td>   
                </tr>
                <tr>
                    <td style="font-weight:bold;">Is Active</td>
                    <td>Yes <input type="radio" value="y" name="catActive"/> No <input type="radio" value="n" name="catActive"/></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="button" id="cSave" name="catSave" value="Submit" onclick="addNewCategory();"/></td>
                </tr>
            </table>
        </div>
    <div id="editCategory">
        <table cellspacing="2px" cellpadding="0" class="adminTable" style="border:1px solid #dadada;">
            <tr>
                <td style="font-weight:bold;">Category Name</td>
                <td><input type="text" id="ceName" name="ceName"/></td>             
            </tr>                   
            <tr>                
                <td style="font-weight:bold;">Category Description</td>
                <td><input type="text" id="ceDesc" name="ceDesc"/></td> 
            </tr>
            <tr>                
                <td style="font-weight:bold;">Category Order</td>
                <td><input type="text" id="ceOrder" /></td> 
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Active</td>
                <td><input type="radio" id="ceActiveY" name="cateActive" value="y"/> Yes
                    <input type="radio" id="ceActiveN" name="cateActive" value="n"/> No</td>
            </tr>
            <tr><td colspan="2"><input type="button" id="cSave" name="catSave" value="Submit" onClick="editSaveCategory();"/></td>
            <td><input type="hidden" id="ceId"/></td>               
            </tr>
        </table>
    </div>
    <div id="addProduct">
        <table cellspacing="2px" cellpadding="0" class="adminTable" style="border:1px solid #dadada;">
            <tr>
                <td style="font-weight:bold;">Product Name</td>
                <td><input type="text" id="paName" /></td>              
            </tr>   
            <tr>                
                <td style="font-weight:bold;">Product SubName</td>
                <td><input type="text" id="paSubName" /></td>   
            </tr>               
            <tr>                
                <td style="font-weight:bold;"> Product Description</td>
                <td><input type="text" id="paDesc" /></td>  
            </tr>
            <tr>                
                <td style="font-weight:bold;">Price</td>
                <td><input type="text" id="paPrice" /></td> 
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Vegetarian</td>
                <td>Yes <input type="radio" id="paVeg" name="proVeg" value="y"/> No <input type="radio" id="paVeg" name="proVeg" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Spicy</td>
                <td>Yes <input type="radio" id="paSpicy" name="proSpicy" value="y"/> No <input type="radio" id="paSpicy" name="proCpicy" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Active</td>
                <td>Yes <input type="radio" id="paActive" name="proActive" value="y"/> No <input type="radio" id="paActive" name="proActive" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Category</td>
                <td>
                <form:select path="categoryList" multiple="single">
                    <form:option value="" label="--"/>
                    <form:options items="${productManagerVO.categoryList}" itemValue="catId" itemLabel="catName"/>
                </form:select>              
                </td>
            </tr>
            <tr>
                <td colspan="2"><input type="button" id="caSave" name="cataSave" value="Submit"/></td>
            </tr>
        </table>
    </div>
    <div id="editProduct">
        <table cellspacing="2px" cellpadding="0" class="adminTable" style="border:1px solid #dadada;">
            <tr>
                <td style="font-weight:bold;">Product Name</td>
                <td><input type="text" id="peName" /></td>              
            </tr>   
            <tr>                
                <td style="font-weight:bold;">Product SubName</td>
                <td><input type="text" id="peSubName" /></td>   
            </tr>               
            <tr>                
                <td style="font-weight:bold;"> Product Description</td>
                <td><input type="text" id="peDesc" /></td>  
            </tr>
            <tr>                
                <td style="font-weight:bold;">Price</td>
                <td><input type="text" id="pePrice" /></td> 
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Vegetarian</td>
                <td>Yes <input type="radio" id="peVegY" name="proeVeg" value="y"/> No <input type="radio" id="peVegN" name="proeVeg" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Spicy</td>
                <td>Yes <input type="radio" id="peSpicyY" name="proeSpicy" value="y"/> No <input type="radio" id="peSpicyN" name="proeSpicy" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Is Active</td>
                <td>Yes <input type="radio" id="peActiveY" name="proeActive" value="y"/> No <input type="radio" id="peActiveN" name="proeActive" value="n"/></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Category</td>
                <td>
                    <form:select path="categoryList" multiple="single" id="peCat">
                    <form:option value="" label="--"/>
                    <form:options items="${productManagerVO.categoryList}" itemValue="catId" itemLabel="catName"/>
                </form:select>  
                </td>
            </tr>
            <tr><td>
                <td colspan="2"><input type="button" id="peSave" name="proeSave" value="Submit" onClick="editSaveProduct();"/></td>
                <input type="text" id="peId"/></td>
            </tr>
        </table>
    </div>
</div>
</form:form>

3 个答案:

答案 0 :(得分:1)

尝试删除第一个项目上的所选=。我不认为这是必要的,因为列表将按照您指定的顺序显示 - 除非您想要 - 如果提交表单时没有选择被触摸,则默认选择?

答案 1 :(得分:1)

试试这个:

<form:select path="categoryList" multiple="single">
    <form:option value="" label="--"/>
        <form:options items="${categoryList}" itemValue="catId" itemLabel="catName"/>
</form:select>

我只更改了multiple属性并从选项中删除了所选属性。这对我有用......我认为,也必须适合你。

编辑:

似乎没关系,只有你的上一个<tr>错了...你连续两个<td>,没有</td>

 <tr>
     <td>
     <td colspan="2">
     <input type="button" id="peSave" name="proeSave" value="Submit" onClick="editSaveProduct();"/>
     </td>
     <input type="text" id="peId"/>
     </td>
 </tr>

必须是

之类的东西
 <tr>
     <td>
         <input type="button" id="peSave" name="proeSave" value="Submit" onClick="editSaveProduct();"/>
     </td>
     <td colspan="2">
         <input type="text" id="peId"/>
     </td>
 </tr>

其次,你为什么要用c:out?您可以将<td><c:out value="${categoryListVO.catName}" /></td>替换为<td>${categoryListVO.catName}</td> ...

第三 - 这种结构

<td><c:if test="${productListVO.fActive}">Yes</c:if>
<c:if test="${!productListVO.fActive}">No</c:if></td>

可以替换为

<c:choose>
    <c:when test="${productListVO.fActive}">
        Yes
    </c:when>
    <c:otherwise>           
        No
    </c:otherwise>
</c:choose>

我发现这种方式更好...其余的似乎没问题,我找不到任何东西,什么可能导致问题。搜索其他未正确关闭的标签。是否有来自jsp编辑器的警告/消息?

答案 2 :(得分:1)

我遇到了这个问题,经过春天的大量挖掘后,我找到了导致它的原因。在我的案例中,这是非常具体的,但有一个普遍的观点,就是这个。

Spring试图弄清楚所选择的选项应该是多大的麻烦。我开始在OptionWriter中挖掘,然后向下移动到SelectedValueComparator。如果应该选择当前选项值,这将尝试所有比较方式。最后它回落到了Propertyeditors和Converters(这是我的错误所在的地方)。

所以我想知道你的CategoryList类是否有一个严重实现的equals方法或转换器没有正确转换(我总是转换成相同的对象)?