【发布时间】: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 && !beanCashMvt.getPortfolio().equals("")) { cashAccounts = data.get(beanCashMvt.getPortfolio()); } else { cashAccounts = new HashMap<String, String>(); } } -
完美!现在,如果您有时间,可以将其添加为对您的问题的回复,以便遇到相同问题的人更容易找到
标签: jsf primefaces datatable