Как установить выбранное по умолчанию значение в теге Struts2 <s: select>? - PullRequest
5 голосов
/ 20 сентября 2010

Я новичок в Struts2. У меня есть пользовательская форма, у ролевого столбца есть выпадающий список. Когда пользовательская форма находится в режиме редактирования, сохраненные значения помещаются в соответствующие элементы управления. Но я не могу установить раскрывающийся список по умолчанию выбранное значение. Как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 17 октября 2011

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

6 голосов
/ 20 сентября 2010

Если значение в вашем теге select соответствует ключу из списка в теге select, Struts сделает правильную вещь и сделает это значение значением по умолчанию. Обратите внимание, что типы должны совпадать.

https://struts.apache.org/tag-developers/select-tag.html

3 голосов
/ 23 марта 2014

Чтобы проиллюстрировать это на примере:

<s:select name="employee.course.courseId" value="3"  label="%{getText('label.courseName')}" list="courses" listKey="courseId" listValue="courseName" />
  • Здесь объект Employee содержит объект с именем «course» и имеет свойство "courseId"
  • listKey выбран как courseId, а listValue выбран как courseName
  • Следовательно, результат будет таким:

        <option value="1">Computer Science</option>
        <option value="2">Electronics</option>
        <option value="3">Mechanical</option>
    
  • Атрибут value установлен в «3» и соответствует 3-му атрибуту в список, который является механическим

  • Поэтому это будет выбранное по умолчанию значение в раскрывающемся списке, следовательно, выходной html будет выглядеть так:

        <option value="1">Computer Science</option>
        <option value="2">Electronics</option>
        <option value="3" selected="selected">Mechanical</option>
    

Надеюсь, это поможет.

0 голосов
/ 20 ноября 2014

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

<select onchange="showHideDefDiv('typeListId')" style="selectCss50" class="selectCss50" id="typeListId" name="definitionDiv_I">
  <option value="blank"> </option>
  <option selected="selected" value="definitionDiv_I">I</option>
</select>

<s:select list="%{editRulePojo.groupPojoList}" listKey="%{groupType}"
          listValue="%{groupTypeValue}" value='definitionDiv_I' />

не работает, а

<s:select list="%{editRulePojo.groupPojoList}" listKey="%{groupType}"
          listValue="%{groupTypeValue}" value='%{editRulePojo.groupType}' />

работает.

Из документации Struts2:

Примечание: для любого из тегов, которые используют списки (выберите, вероятно, самый вездесущий), который использует список OGNL нотации (см. пример «месяцы» выше), следует отметить, что ключ карты создан (в примере месяцев, «01», «02» и т. д.). «1» - это символ, «01» - это строка, «1» - это строка. Это важно, так как если значение, возвращаемое вашим атрибутом «значение», НЕ совпадает с типом ключа в атрибуте «список», они НЕ будет соответствовать, даже если их значения String могут быть эквивалентными. Если они не совпадают, ничего в вашем списке будет выбран автоматически.

0 голосов
/ 19 июля 2013
<!--name attribute inside select tag must be a variable in action class with getter/setter -->
<!-- test variable sets the value of selected item in action class -->
<select name="test">
    <!-- name attribute could be anything you want but value attribute must be a model class variable-->
    <s:set name="lead_string_LS_ID" value="MasterDataModel.string_LS_ID" />
        <!-- value attribute must be a list to iterate, status (an instanceof IteratorStatus will be pushed into stack upon each iteration)or result  -->
        <!-- var Name used to reference the value pushed into the Value Stack (my list contain leadSource_String_Id)-->
        <s:iterator value="leadSource_list" status="result" var="leadSource_String_Id">
                <!--#lead_string_LS_ID is value taken from <set> tag above. Note # must be in-front of the name
                    leadSource_String_Id is element specified in var of <iterator> tag  
                -->
                <s:if test='(#lead_string_LS_ID.equals(leadSource_String_Id))'>

                    <option value="<s:property value='leadSource_String_Id'/>" selected="selected">
                        <s:property value="leadSource_String_Name" />
                    </option>
                </s:if>
                <s:else>
                    <option
                        value="<s:property value='leadSource_String_Id'/>">
                        <s:property value="leadSource_String_Name" />
                    </option>
                </s:else>
        </s:iterator>
</select>
...