Проблема с формой: выберите, все метки выбраны - PullRequest
0 голосов
/ 28 января 2012

Я использую 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>

Проблема заключается в том, что все параметры, которые генерируются, имеют значение selected = "selected", что делает выбор "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 ]

1 голос
/ 28 января 2012

Попробуйте это:

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

Я только изменил несколько атрибутов и удалил выбранный атрибут из опции. Это работает для меня ... и я думаю, должно работать и для вас.

редактирование:

Кажется, все в порядке, только ваш последний <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?

1 голос
/ 31 мая 2013

У меня была эта проблема, и после долгих раскопок весной я обнаружил, что вызвало ее для меня. Это было что-то очень конкретное в моем случае, но есть общий момент, который заключается в следующем.

Spring очень старается понять, какой должна быть выбранная опция. Я начал копаться в OptionWriter, а затем переместился в SelectedValueComparator. Это попытается всеми способами сравнений сработать, если текущее значение параметра должно быть выбрано. В конце концов, он возвращается к редакторам и конвертерам собственности (именно в этом моя ошибка).

Поэтому мне интересно, был ли в вашем классе CategoryList плохо реализованный метод equals или преобразователь, который не конвертируется должным образом (мой всегда конвертируется в один и тот же объект)?

1 голос
/ 28 января 2012

Попробуйте удалить выбранный = выбранный на первом элементе.Я не думаю, что это необходимо, поскольку список будет отображаться в указанном вами порядке - если вы не хотите - быть выбором по умолчанию, если форма отправляется без касания этого выбора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...