【问题标题】:How to show one selected value in JSF 1.2 selectOneMenu list from database如何在 JSF 1.2 selectOneMenu 列表中从数据库中显示一个选定的值
【发布时间】:2016-07-22 21:27:49
【问题描述】:

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

【问题讨论】:

  • 这里有很多与“selectOneMenu”相关的信息stackoverflow.com/tags/selectonemenu/info包括如何设置选中项。
  • @RubioRic 你能编辑我的代码吗我完全一无所知
  • 在链接中出现的示例中,所选项目是一个简单的字符串。您是否尝试过在 searchUserProfileBean.insuredMemberName 中使用字符串?
  • searchUserProfileBean.memberDependentList 是 String 列表还是 Selecttem 列表?
  • @RubioRic searchUserProfileBean.memberDependentList 是一个选择项列表

标签: jsf jsf-1.2


【解决方案1】:

让我在你的代码中标记三点

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2012-07-14
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多