如何比较JSF SelectOne菜单中的值

如何比较JSF SelectOne菜单中的值,jsf,primefaces,selectonemenu,Jsf,Primefaces,Selectonemenu,我正在开发一个JSF应用程序 我有2个selectOnemenu控件和submit按钮。 如果两个字段的值相等,我需要禁用该按钮 <h:selectOneMenu id="from" value="#{currencyBean.history.fromCurrency}" > <f:selectItems value="#{currencyBean.currency}" var="c" itemValue="#{c}" itemLabel="#{c.name}"/

我正在开发一个JSF应用程序 我有2个selectOnemenu控件和submit按钮。 如果两个字段的值相等,我需要禁用该按钮

 <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结合使用,但每次我更改一个下拉列表时,第二个drowpdown的值在backbean中变为null,因此我无法读取它

这是我的后座椅

@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 scope,所以托管bean的每个请求都将从容器中删除,因此,当您定义onchange=submit时,这只是我的假设,因为您还没有定义如何实现onchange属性,并且您从一个selectBox中选择值。该组件的值将被更新,但第一个仍然为null。当您选择第二个selectBox时,从第一个selectBox更新的值不再存在,因为托管bean在第一个请求后已被删除。您应该尝试使用更大的范围,例如@ViewScope。如果没有帮助,那么需要更多的信息,比如实现onchange属性

我的假设是,您的所有问题都来自托管bean范围。您有@Request scope,所以托管bean的每个请求都将从容器中删除,因此,当您定义onchange=submit时,这只是我的假设,因为您还没有定义如何实现onchange属性,并且您从一个selectBox中选择值。该组件的值将被更新,但第一个仍然为null。当您选择第二个selectBox时,从第一个selectBox更新的值不再存在,因为托管bean在第一个请求后已被删除。您应该尝试使用更大的范围,例如@ViewScope。如果没有帮助,则需要进一步的信息,如实现onchange属性

您是否可以更精确地键入如何实现onchange方法??你的支持bean看起来怎么样,尤其是它的作用域。我已经更新了我的问题,添加了我的backbean。关于onchange实现,我只是尝试在日志中写入from和to两个字段的值,但是如果我从字段更新to值为null,如果我更新到字段from值为null,那么onchange实现在哪里??在SelectOne菜单中?onchange属性中调用了什么?您是否可以更精确地键入详细信息,并详细说明如何实现onchange方法??你的支持bean看起来怎么样,尤其是它的作用域。我已经更新了我的问题,添加了我的backbean。关于onchange实现,我只是尝试在日志中写入from和to两个字段的值,但是如果我从字段更新to值为null,如果我更新到字段from值为null,那么onchange实现在哪里??在SelectOne菜单中?在onchange属性中调用什么