【问题标题】:How I can consult fields when selecting a row in p:dataTable?在 p:dataTable 中选择一行时如何查阅字段?
【发布时间】:2018-04-08 18:02:54
【问题描述】:

我有一个表单和数据表,我的问题是当我在表中选择一行时,所有字段都被查询,期望一个字段,因为它依赖于另一个字段。如果你能提供帮助,我将不胜感激我来咨询这个领域。

我的表格

<p:outputLabel for="Portfolio" value="#{msg['Portfolio']}" />
                    <p:selectOneMenu id="Portfolio" value="#{cashMvtView.beanCashMvt.portfolio}" style="width:120px">
                        <p:ajax listener="#{cashMvtView.onPortfolioChange}" update="Cashaccount" />
                        <f:selectItem itemLabel="Selectionner un portefeuille" itemValue="" noSelectionOption="true" />
                        <f:selectItems value="#{cashMvtView.portfolios}" />
                    </p:selectOneMenu>

                    <p:outputLabel for="Cashaccount" value="#{msg['Cashaccount']}" />
                    <p:selectOneMenu id="Cashaccount" value="#{cashMvtView.beanCashMvt.cashAccount}" style="width:120px">
                        <f:selectItem itemLabel="Selectionner un compte" itemValue="" noSelectionOption="true" />
                        <f:selectItems value="#{cashMvtView.cashAccounts}" />
                    </p:selectOneMenu>

cashMvtView.onPortfolioChange:

public void onPortfolioChange() {        
    if(beanCashMvt.getPortfolio() !=null && !beanCashMvt.getPortfolio().equals("")){            
        cashAccounts = data.get(beanCashMvt.getPortfolio());            
    }
    else
        cashAccounts = new HashMap<String, String>();
}

CashMvtView.java:

private Map<String,Map<String,String>> data = new HashMap<String, Map<String,String>>();
private String portfolio; 
private String cashAccount;  
private Map<String,String> portfolios;
private Map<String,String> cashAccounts;

@PostConstruct
public void init() {
    portfolios  = new HashMap<String, String>();
    portfolios.put("Portefeuille1", "Portefeuille1");
    portfolios.put("Portefeuille2", "Portefeuille2");
    portfolios.put("Portefeuille3", "Portefeuille3");

    Map<String,String> map = new HashMap<String, String>();
    map.put("Portefeuille1_1", "Portefeuille1_1");
    map.put("Portefeuille1_2", "Portefeuille1_2");
    map.put("Portefeuille1_3", "Portefeuille1_3");
    data.put("Portefeuille1", map);

    map = new HashMap<String, String>();
    map.put("Portefeuille2_1", "Portefeuille2_1");
    map.put("Portefeuille2_2", "Portefeuille2_2");
    map.put("Portefeuille2_3", "Portefeuille2_3");
    data.put("Portefeuille2", map);

    map = new HashMap<String, String>();
    map.put("Portefeuille3_1", "Portefeuille3_1");
    map.put("Portefeuille3_2", "Portefeuille3_2");
    map.put("Portefeuille3_3", "Portefeuille3_3");
    data.put("Portefeuille3", map);
}

public Map<String, Map<String, String>> getData() {
    return data;
}

public String getPortfolio() {
    return portfolio;
}

public void setPortfolio(String portfolio) {
    this.portfolio = portfolio;
}

public String getCashAccount() {
    return cashAccount;
}

public void setCashAccount(String cashAccount) {
    this.cashAccount = cashAccount;
}

public Map<String, String> getPortfolios() {
    return portfolios;
}

public Map<String, String> getCashAccounts() {
    return cashAccounts;
}

我的数据表:

<p:dataTable var="cashMvt"  value="#{cashMvtView.listeFilteredCashMvt}" 
                                 selectionMode="single" filteredValue="#{cashMvtView.listeFilteredCashMvt}"
                                 selection="#{cashMvtView.selectedCashMvt}" 
                                 rowKey="#{cashMvt.id}"  tableStyle="width:auto"
                                 paginator="true" widgetVar="tabRecherche" id="tabRecherche"
                                 paginatorPosition="bottom"  rows="14"
                                 paginatorTemplate="{Exporters} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} 
                                 {RowsPerPageDropdown} {JumpToPageDropdown} {Controle}" 
                                 >
                        <p:ajax event="rowSelect"  listener="#{cashMvtView.onRowSelect}"  update="form form2" id="ajaxRS" />

                            <p:column style="white-space: nowrap" headerText="#{msg['Portfolio']}" sortBy="#{cashMvt.portfolio}" ><h:outputText value="#{cashMvt.portfolio}" /></p:column>
                            <p:column style="white-space: nowrap" headerText="#{msg['Cashaccount']}" sortBy="#{cashMvt.cashAccount}" ><h:outputText value="#{cashMvt.cashAccount}"/> </p:column>

cashMvtView.listeFilteredCashMvt 是一个返回我想在表单中显示的内容的列表

这是我的网络应用程序的屏幕 enter image description here

如您所见,除了“comptes especes”(我的代码中的现金账户)之外,所有字段都被查询 请注意,此 scrren 中的“portefeuille”是我代码中的投资组合。

【问题讨论】:

  • 您在选择更改时更新Cashaccount,您是否尝试更新整个@form
  • 我只需要更新cashacount,因为它取决于potfolio,无论如何,我解决了这个问题:我在我的数据表中的cashMvtView.onRowSelect 中添加了一个代码。
  • public void onRowSelect(SelectEvent event) { beanCashMvt = mapper.map(selectedCashMvt, HcashMvtVO.class) ; // System.out.println("onRowSelect===================" + beanCashMvt.getCashAccount()); if (beanCashMvt.getPortfolio() != null &amp;&amp; !beanCashMvt.getPortfolio().equals("")) { cashAccounts = data.get(beanCashMvt.getPortfolio()); } else { cashAccounts = new HashMap&lt;String, String&gt;(); } }
  • 完美!现在,如果您有时间,可以将其添加为对您的问题的回复,以便遇到相同问题的人更容易找到

标签: jsf primefaces datatable


【解决方案1】:

我解决了这个问题:我在我的数据表中的 cashMvtView.onRowSelect 中添加了这段代码。

 public void onRowSelect(SelectEvent event) {
    beanCashMvt = mapper.map(selectedCashMvt, HcashMvtVO.class)  ;         
    if (beanCashMvt.getPortfolio() != null && !beanCashMvt.getPortfolio().equals("")) {
        cashAccounts = data.get(beanCashMvt.getPortfolio());
    } else {
        cashAccounts = new HashMap<String, String>();
    }
} 

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2012-09-11
    • 2015-08-30
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2011-01-08
    • 2016-04-18
    相关资源
    最近更新 更多