我在根据ID推广下拉列表时遇到问题。
查看:
<h:selectOneMenu id="dropDown" value="#{sampleVo.dropDownType}" ">
<f:selectItem itemValue="Select Value" itemLabel="Select Value" />
<f:selectItems value="#{sampleService.dropDownList}" />
</h:selectOneMenu>
SampleVo
:
public class SampleVo implements Serializable {
private String dropDownType;
// getters and setters
}
SampleService
:
public class SampleServiceImpl implements SampleService {
private List<SampleVo> listOfSampleVo;
private List<String> dropDownList;
public void onLoad() {
dropDownFunction();
}
public void dropDownFunction() {
if (dropDownList == null) {
dropDownList = new ArrayList<String>();
dropDownList.add("ONE");
dropDownList.add("TWO");
dropDownList.add("THREE");
}
}
}
数据库结构:
SAMPLE_ID SAMPLE_DESCRIPTION
1 ONE
2 TWO
3 THREE
在页面加载期间,所有三个下拉值都会填充默认的“选择值”作为第一个选项。下拉值映射到数据库,带有样本ID。如果DB中存在记录(即样本id = 2,样本描述= TWO),我想根据ID在下拉列表中显示两个。我怎样才能做到这一点?
答案 0 :(得分:1)
不要将dropDownList作为String列表,而是将其设为SelectItem列表。您可以通过这种方式单独设置值和标签。
答案 1 :(得分:0)
public class SampleVO {
private int value;
private String name;
//getter & setter
}
在你的xhtml中
<f:selectItems value="#{sampleService.dropDownList}" var="v" itemLabel="#{v.name}" itemValue="#{v.value}"/>
答案 2 :(得分:0)
好的,我认为你需要一个自定义转换器
您可以查看here
检查getAsString()和getAsObject()的实现,并根据需要对其进行自定义。
提示。 getAsString应返回TWO,getAsObject应返回整个SampleVO对象。
le:@Pablo你是对的......他也需要这个
答案 3 :(得分:0)
根据你的问题,当你的页面被加载时,你想要获得默认选择值是(样本id = 2,样本描述= TWO)。所以你应该在你的“dropDownType”变量中初始化这个值。你的xhtml是如果您使用了f:selectItems标记,则应删除f:selectItem标记。
答案 4 :(得分:0)
更改dropDownFunction() 把它作为一个列表
public List<SelectItem> dropDownItems() {
ArrayList<SelectItem> items = new ArrayList<SelectItem>();
items.add(new SelectItem(1,"ONE");
items.add(new SelectItem(2,"TWO");
items.add(new SelectItem(3,"TREE");
}
将dropDownType更改为整数