我是 Struts2 的新手。我有用户表单,角色列有一个下拉列表。当用户窗体处于编辑模式时,存储的值被放置到相应的控件中。但是我不能默认设置下拉列表的选择值。我该怎么做?
6 回答
除了 Nate 的回答之外,我发现如果键类型是字符串,我需要在 value 属性中的数据周围加上撇号,以便它识别我的输入值是字符串。
如果您的选择标签中的值与选择标签中列表中的一个键匹配,Struts 将做正确的事情并将该值设为默认值。请注意,类型必须匹配。
To illustrate this in an example :
<s:select name="employee.course.courseId" value="3" label="%{getText('label.courseName')}" list="courses" listKey="courseId" listValue="courseName" />
- Here the Employee object contains an object called "course" and it has a property "courseId"
- listKey is selected as courseId and the listValue is selected as courseName
Hence the output will be like :
<option value="1">Computer Science</option> <option value="2">Electronics</option> <option value="3">Mechanical</option>
The value attribute is set to "3" and it matches the 3rd attribute in the list, which is Mechanical
Therefore this will be the default selected value in the dropdown, hence the output html will be like :
<option value="1">Computer Science</option> <option value="2">Electronics</option> <option value="3" selected="selected">Mechanical</option>
Hope this helps.
即使您正确地遵循了所有内容并且它没有预先选择,您也需要确保键的返回类型匹配。例如以下列表
<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 文档:
注意:对于任何使用列表的标签(select 可能是最普遍的),它使用 OGNL 列表表示法(参见上面的“月”示例),应该注意创建的映射键(在月示例中, '01'、'02' 等)被输入。“1”是一个字符,“01”是一个字符串,“1”是一个字符串。这很重要,因为如果您的“value”属性返回的值与“list”属性中的键的类型不同,它们将不匹配,即使它们的 String 值可能相等。如果它们不匹配,则列表中的任何内容都不会被自动选择。
在下拉列表中显示所选值的正确方法是在您的操作类中创建 get 方法:
动作类:
public String getDefaultValue() {
return "defaultVal";
}
JSP:
<s:select theme="simple" list="yourList" name="name" id="id" listKey="id" listValue="description" value="defaultValue"/>
<!--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>