我在JSF 1.2中工作
我已使用数据库中的selectOneMenu
填充了一个列表。现在我的要求是,在来自数据库的列表中,有一个值必须显示为选中。但我不能这样做。
我发布了我到目前为止所做的代码,
我的bean代码
mem = new MemberProxy().getMemberDetails(loggedInUser
.getUserAccessList().get(0).getClientCode(), loggedInUser
.getUserAccessList().get(0).getCertificateNumber());
memberDependent.setInsuredMemberName(new SelectItem(mem.getNameFirst()));
我的JSP代码
<h:panelGroup styleClass="panelGroup" id="grpMemDep">
<h:selectOneMenu value="#{searchUserProfileBean.insuredMemberName}" id="memDepCode" styleClass="inputfont" onchange="getMemberDepInfo();" >
<f:selectItems id="selectItems32"
value="#{searchUserProfileBean.memberDependentList}" />
</h:selectOneMenu>
</h:panelGroup>
这就是我构建列表的方式
MemberDependentBO memberDependent = new MemberDependentBO();
List<DependentDTO> dependentList = new MemberProxy()
.getDependentListFormMember( loggedInUser
.getUserAccessList().get(0).getClientCode(),
loggedInUser
.getUserAccessList().get(0).getCertificateNumber());
List<SelectItem> selList=new ArrayList<SelectItem>();
for(DependentDTO depDTO:dependentList){
SelectItem sel = new SelectItem();
sel.setLabel(depDTO.getNameFirst());
sel.setValue(depDTO.getCertNumber()+"#"+depDTO.getClientCode()+"#"+depDTO.getDependentCode());
selList.add(sel);
}
mem = new MemberProxy().getMemberDetails(loggedInUser
.getUserAccessList().get(0).getClientCode(), loggedInUser
.getUserAccessList().get(0).getCertificateNumber());
memberDependent.setInsuredMemberName(new SelectItem(mem.getNameFirst()));
SelectItem sel = new SelectItem();
sel.setLabel(mem.getNameFirst());
sel.setValue(mem.getCertNumber().toString().trim()+"#"+mem.getClientCode().toString().trim());
selList.add(sel);
memberDependent.setMemberDependentList(selList);
在这里,我使用了一个selectItem
类型的变量,我将其设置为我的bean,并且我试图在列表中显示但它不起作用。
答案 0 :(得分:0)
让我标记代码的三个要点
for (DependentDTO depDTO:dependentList){
SelectItem sel = new SelectItem();
sel.setLabel(depDTO.getNameFirst());
sel.setValue(depDTO.getCertNumber()+"#"+depDTO.getClientCode()+"#"+depDTO.getDependentCode());
selList.add(sel); // [1]
}
mem = new MemberProxy().getMemberDetails(loggedInUser
.getUserAccessList().get(0).getClientCode(), loggedInUser
.getUserAccessList().get(0).getCertificateNumber());
memberDependent.setInsuredMemberName(new SelectItem(mem.getNameFirst())); // [2]
SelectItem sel = new SelectItem();
sel.setLabel(mem.getNameFirst());
sel.setValue(mem.getCertNumber().toString().trim()+"#"+mem.getClientCode().toString().trim());
selList.add(sel); // [3]
memberDependent.setMemberDependentList(selList);
[1]您要在此列表中选择的值是什么?
[2]您正在创建没有既定值的项目。项目值将等于项目标签:mem.getNameFirst()
[3]此时,您将包含一个项目,其中相同标签但不同的值与[2]中生成的项目相同。此外,生成的值与[1]
中生成的值不同sel.setValue(depDTO.getCertNumber()+"#"+depDTO.getClientCode()+"#"+depDTO.getDependentCode());
sel.setValue(mem.getCertNumber().toString().trim()+"#"+mem.getClientCode().toString().trim());
在第二句中,您正在修剪并且不包括第三个元素“dependentCode”
试试这个
SelectItem sel = new SelectItem();
sel.setLabel(mem.getNameFirst());
// INCLUDE DEPENDENT CODE
sel.setValue(mem.getCertNumber()+"#"+mem.getClientCode()+"#"+mem.getDependentCode());
memberDependent.setInsuredMemberName(sel);
selList.add(sel); // ONLY, ONLY IF ITEM IS NOT INCLUDE IN LOOP [1]
memberDependent.setMemberDependentList(selList);