当前位置: 首页 > 知识库问答 >
问题:

如何使用数据库中的对象在p:selectOneMenu中设置默认项,如“Please select one”?

缪宪
2023-03-14

我有一个填充了数据库对象的p: selectOneMenu。当页面首先被查找时,selectOneMenu的默认项目必须是字符串类型的“请选择一个”(selectOneMenu的其他项目是对象类型。)当页面首先加载时,数据库中对象类型的一个数据默认可见。我不想this.how在p: selectOneMenu中设置默认项目,例如“请选择一个”和数据库中的对象?

 <ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:p="http://primefaces.org/ui"
            xmlns:f="http://java.sun.com/jsf/core"
            template="layout.xhtml">

  <ui:define name="pageContent">
    <h:form id="silYapilandirmaForm" prependId="true">
                 <p:panel id="silYapilandirmaPanel" header="#{etiketler.silYapilandirma}"         collapsed="true" toggleable="true" >
            <p:tabView id="tabView" dynamic="false" activeIndex="0">

                      <p:tab title="#{etiketler.silIslemleri}" id="silIslemleriTab">
                    <p:outputPanel id="silIslemleriPanel">


                        <h:panelGrid  id="eshsSecPanelGrid" columns="3" >
                            <h:outputText value="#{etiketler.eshsSertifika}:*" />  

                            <p:selectOneMenu  id="silYapilandirmaSelect"  value="#{silYapilandirmaView.seciliEshsSertifika}" effect="fade" effectDuration="100" style="width: 205px"  converter="#{entityConverter}">

                                <f:selectItem itemLabel="Please select one" itemValue="#{null}"/>


                                <f:selectItems value="#{silYapilandirmaView.eshsSertifikaList}" var="eshsSertifika" 
                                                       itemLabel="#{eshsSertifika.sertifikaKodAdi}" itemValue="#{eshsSertifika}" />



                                <p:ajax process="@this" event="change" update="eshsSecPanelGrid,silIslemleriPanel"  listener="#{silYapilandirmaView.addListener()}"  />
                            </p:selectOneMenu>

                            <h:outputText value=""/>

                            <h:outputText value="#{etiketler.eshsSertifika}:" />
                            <h:inputText  value="#{silYapilandirmaView.seciliEshsSertifika.sertifikaKodAdi}" disabled="true" size="30"/>


                            <h:outputText value=""/>
                            <h:outputText value="#{etiketler.silUretimBaslangicSaati}:* " />   
                            <p:inputMask id="silUretimBaslangicSaatiInputMask"  value="#{silYapilandirmaView.seciliEshsSertifika.silUretimBaslangicSaati}" mask="99:99:99" size="30" />
                            <p:message for="silUretimBaslangicSaatiInputMask" display="text" />

                            <h:outputText value="#{etiketler.silUretimBaslangicPeriyodu}:* "  />
                            <p:inputMask  maxlength="4" mask="99?99" id="periyotInputMask"  size="30" value="#{silYapilandirmaView.seciliEshsSertifika.silUretimPeriyodu}" >  
      </p:inputMask> 
                            <p:message for="periyotInputMask" display="text" />
                        </h:panelGrid>

                    </p:outputPanel>
                </p:tab> 

            </p:tabView>


        </p:panel>


    </h:form>

</ui:define>
</ui:composition>

我在p:selectOneMenu的p:ajax中有addListener方法。这种方法是这样工作的;您正在从selectOneMenu中选择一个对象,该对象被放入填充selectOneMenu的列表的最后一个索引中,列表最后一个索引中的对象被放入所选对象的索引中。我的意思是你正在选择一个对象,这个对象在列表中的索引是2。我们说,列表中总共有五个对象。索引为2的选定对象放在列表的索引4中。列表索引4中的对象放在列表的索引2中。我为我的英语感到抱歉。此addListener方法的目的是,selectOneMenu始终显示列表的最后一项。无论选择哪个对象,它都会显示列表的最后一项。因此,由于这种方法,我选择的对象被放在列表的最后一个,并向用户显示为已选择。这种方法效果很好。但当页面首先加载时,列表的最后一项显示为p:selectOneMenu中的selected,我希望“please select”显示为默认值。“我的bean类是SilYapilandirmaView.java

     @ManagedBean
     @ViewScoped
    public class SilYapilandirmaView extends BaseView implements Serializable {


    @ManagedProperty("#{commonService}")
    private CommonService commonService;

    private EshsSertifika seciliEshsSertifika;
    private List<EshsSertifika> eshsSertifikaList;


    @PostConstruct
    public void init() {


  seciliEshsSertifika=new EshsSertifika();
    eshsSertifikaList = (List) commonService.hepsiniGetir(EshsSertifika.class);
     seciliEshsSertifika = eshsSertifikaList.get(eshsSertifikaList.size() - 1);

  }

  public CommonService getCommonService() {
    return commonService;
  }

  public void setCommonService(CommonService commonService) {
    this.commonService = commonService;
}


 public void addListener() {

  if(seciliEshsSertifika ==null)
  {
     return;
  }

    int i = 0;
    for (EshsSertifika eshsSert : eshsSertifikaList) {
        if (seciliEshsSertifika.getId() == eshsSert.getId()) {
            eshsSert = eshsSertifikaList.get(eshsSertifikaList.size() - 1);
            eshsSertifikaList.set(i, eshsSert);
            eshsSertifikaList.set(eshsSertifikaList.size() - 1, seciliEshsSertifika);

            break;

        }
        i++;
    }

    }

    public EshsSertifika getSeciliEshsSertifika() {
    return seciliEshsSertifika;
    }

    public void setSeciliEshsSertifika(EshsSertifika seciliEshsSertifika) {
    this.seciliEshsSertifika = seciliEshsSertifika;
    }



     public List<EshsSertifika> getEshsSertifikaList() {
    return eshsSertifikaList;
     }

     public void setEshsSertifikaList(List<EshsSertifika> EshsSertifikaList) {
    this.eshsSertifikaList = EshsSertifikaList;
    }
     }

当我在init()方法中添加以下代码时,我的代码工作得非常好!secilieshsertifika=null;

public void init() {


  seciliEshsSertifika=new EshsSertifika();
    eshsSertifikaList = (List) commonService.hepsiniGetir(EshsSertifika.class);
     seciliEshsSertifika = eshsSertifikaList.get(eshsSertifikaList.size() - 1);

seciliEshsSertifika=null;
  }

加载页面时,“please select one”在p:selectOneMenu中可见,但我不想使“secilieshsertifika”对象等于null。,还有其他人想出另一个解决方案吗?

共有1个答案

戴品
2023-03-14

试试这个。获取您要设置第一个项目的对象。(这个例子我得到列表中的第一个对象)

bean.java

EshsSertifika firstItem = eshsSertifikaList.get(0);

xhtml

<f:selectItem itemLabel="#{eshsSertifika.firstItem.sertifikaKodAdi}" itemValue="#{eshsSertifika.firstItem}" />
 类似资料:
  • 我使用< code>Liquibase更新我的数据库,并对< code>H2进行测试。 我正在使用来配置属性。我使用 连接到数据库,但没有成功。 我意识到在,所以我尝试将默认模式设置为 但这没有成功,我看到日志是 如何在 H2 中设置默认架构和数据库名称?

  • 在我的quarkus应用程序中有两个命名的数据源,我们称之为A和B: Quarkus.datasource.a.db-kind=Oracle Quarkus.datasource.b.db-kind=Oracle 因此,每次应用程序启动时,我都会收到这样的通知: 警告:无法确定默认数据源的数据库类型

  • 我在谷歌上搜索了一下,没有找到任何关于这个的信息。 我有这个密码。 有这样的数据 输出是这样的。 如何将数据中的第一个选项设置为默认值,以便得到如下结果。

  • 我在下面试过了,但它们不起作用 我检查了下面的链接:Kotlin等价于Java的字符串[]是什么? https://kotlinlang.org/docs/functions.html

  • 问题内容: 我在同一包中有2个班级。这两个类都具有main方法。现在,我想构建一个jar文件。我想建立2个jar文件,这些文件使用不同的主要功能作为默认主要功能。 例如 如何在NetBeans IDE中进行操作? 我找到了答案。您可以在netbeans中轻松地做到这一点:1)右键单击项目>属性>运行>选择类frm并下拉列表。在netbeans中是如此简单。Netbeans摇摇欲坠! 问题答案: 在

  • 问题内容: 我在使用react-select时遇到问题。我使用redux表单,并且使我的react-select组件与redux表单兼容。这是代码: 这里是我如何渲染它: 但是问题是我的下拉菜单没有我希望的默认值。我做错了什么?有任何想法吗? 问题答案: 我猜你需要这样的东西: