如何在数据库中显示JSF 1.2 selectOneMenu列表中的一个选定值

时间:2016-04-03 10:00:38

标签: jsf jsf-1.2

我在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,并且我试图在列表中显示但它不起作用。

1 个答案:

答案 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);