如何比较值 JSF selectonemenu
How to Compare the values JSF selectonemenu
我正在开发一个 JSF 应用程序
我有 2 个 selectOnemenu 控件和提交按钮。
如果 2 个字段的值相等,我需要禁用该按钮
<h:selectOneMenu id="from" value="#{currencyBean.history.fromCurrency}" >
<f:selectItems value="#{currencyBean.currency}" var="c" itemValue="#{c}" itemLabel="#{c.name}"/>
</h:selectOneMenu>
<p:outputLabel for="to" value="to:" />
<h:selectOneMenu id="to" value="#{currencyBean.history.toCurrency}" >
<f:selectItems value="#{currencyBean.currency}" var="c" itemValue="#{c}" itemLabel="#{c.name}"/>
</h:selectOneMenu>
<p:commandButton id="calculateButton" value="Convert" update=":convert :historyPanel" onstart="PF('statusDialog').show()" onsuccess="PF('statusDialog').hide()" validateClient="true" ajax="true" action="#{currencyBean.Calculate()}" />
我尝试将 onchange 与 ajax 一起使用,但每次我更改一个下拉菜单时,第二个下拉菜单的值在 backbean 中变为 null,因此我无法读取它。
这是我的 backbean
@Named(value = "currencyBean")
@RequestScoped
public class CurrencyBean implements Serializable {
/**
* Creates a new instance of CurrencyBean
*/
private History history;
private Currency currency;
private Date currentDate;
@Inject
private Loginbean loginBean;
private List<History> historyList;
public List<History> getHistoryList() {
int userId = loginBean.getUserId();
if (userId != -1) {
return new HistoryHelper().GetHistoryListByUser(userId);
}
return null;
}
public CurrencyBean() {
history = new History();
}
public History getHistory() {
return history;
}
public void setHistory(History history) {
this.history = history;
}
public Currency[] getCurrency() {
return Currency.values();
}
public Date getCurrentDate() {
return new Date();
}
public void Calculate() {
int userId = loginBean.getUserId();
if (userId != -1) {
new CurrencyClient().Convert(userId, this.history);
}
}
}
有线索吗?
我的假设是您的所有问题都来自托管 bean 范围。你有 @Request
范围,所以你的托管 bean 的每个请求都会从容器中删除,因此当你定义 onchange="submit()"
(这只是我的假设,因为你没有定义你如何实现 onchange 属性)并且你 select value from one select 该组件的 Box 组件值已更新,但第一个仍然为空。当您 select 第二个 selectBox 值从第一个 selectBox 更新时不再存在,因为托管 bean 在第一次请求后已被删除。您应该尝试更广泛的范围,例如 @ViewScope
。如果它没有帮助,那么将需要更多信息,例如实现 onchange 属性
我正在开发一个 JSF 应用程序 我有 2 个 selectOnemenu 控件和提交按钮。 如果 2 个字段的值相等,我需要禁用该按钮
<h:selectOneMenu id="from" value="#{currencyBean.history.fromCurrency}" >
<f:selectItems value="#{currencyBean.currency}" var="c" itemValue="#{c}" itemLabel="#{c.name}"/>
</h:selectOneMenu>
<p:outputLabel for="to" value="to:" />
<h:selectOneMenu id="to" value="#{currencyBean.history.toCurrency}" >
<f:selectItems value="#{currencyBean.currency}" var="c" itemValue="#{c}" itemLabel="#{c.name}"/>
</h:selectOneMenu>
<p:commandButton id="calculateButton" value="Convert" update=":convert :historyPanel" onstart="PF('statusDialog').show()" onsuccess="PF('statusDialog').hide()" validateClient="true" ajax="true" action="#{currencyBean.Calculate()}" />
我尝试将 onchange 与 ajax 一起使用,但每次我更改一个下拉菜单时,第二个下拉菜单的值在 backbean 中变为 null,因此我无法读取它。
这是我的 backbean
@Named(value = "currencyBean")
@RequestScoped
public class CurrencyBean implements Serializable {
/**
* Creates a new instance of CurrencyBean
*/
private History history;
private Currency currency;
private Date currentDate;
@Inject
private Loginbean loginBean;
private List<History> historyList;
public List<History> getHistoryList() {
int userId = loginBean.getUserId();
if (userId != -1) {
return new HistoryHelper().GetHistoryListByUser(userId);
}
return null;
}
public CurrencyBean() {
history = new History();
}
public History getHistory() {
return history;
}
public void setHistory(History history) {
this.history = history;
}
public Currency[] getCurrency() {
return Currency.values();
}
public Date getCurrentDate() {
return new Date();
}
public void Calculate() {
int userId = loginBean.getUserId();
if (userId != -1) {
new CurrencyClient().Convert(userId, this.history);
}
}
}
有线索吗?
我的假设是您的所有问题都来自托管 bean 范围。你有 @Request
范围,所以你的托管 bean 的每个请求都会从容器中删除,因此当你定义 onchange="submit()"
(这只是我的假设,因为你没有定义你如何实现 onchange 属性)并且你 select value from one select 该组件的 Box 组件值已更新,但第一个仍然为空。当您 select 第二个 selectBox 值从第一个 selectBox 更新时不再存在,因为托管 bean 在第一次请求后已被删除。您应该尝试更广泛的范围,例如 @ViewScope
。如果它没有帮助,那么将需要更多信息,例如实现 onchange 属性