Jsf 计算插入值时的值

Jsf 计算插入值时的值,jsf,jsf-2.2,Jsf,Jsf 2.2,我想创建非常简单的JSF网页,用于价格计算: <h:form> <h:outputText value="Number of Computers"/> <h:panelGroup layout="block" id="desktopClients_select" style="padding-top: 3px;" styleClass="text"> <h:inputText id="desktopClients" va

我想创建非常简单的JSF网页,用于价格计算:

<h:form>
    <h:outputText value="Number of Computers"/>

    <h:panelGroup layout="block" id="desktopClients_select" style="padding-top: 3px;" styleClass="text">
        <h:inputText id="desktopClients" value="#{pricingCalculator.computers}">
            <f:ajax event="change" render="@form" listener="#{pricingCalculator.calculateTotalPrice}"/>
        </h:inputText>
    </h:panelGroup>

    <h:outputText value="Email support incidents"/>

    <h:panelGroup layout="block" id="email_support_incidents" style="padding-top: 3px;" styleClass="text">
        <h:inputText id="email_support_incidents_text" value="#{pricingCalculator.emailSupportIncidents}">
            <f:ajax event="change" render="@form" listener="#{pricingCalculator.calculateTotalPrice}"/>
        </h:inputText>
    </h:panelGroup>

    <h:outputText value="Phone support incidents"/>

    <h:panelGroup layout="block" id="phone_support_incidents" style="padding-top: 3px;" styleClass="text">
        <h:inputText id="phone_support_incidents_text" value="#{pricingCalculator.phoneSupportIncidents}">
            <f:validateLongRange minimum="1" maximum="150" />
            <f:ajax event="change" render="@form" listener="#{pricingCalculator.calculateTotalPrice}"/>
        </h:inputText>
    </h:panelGroup>

    <h:outputText value="Total price"/>

    <h:panelGroup layout="block" id="total_price" style="padding-top: 3px;" styleClass="text">
        <h:outputText value="#{pricingCalculator.calculateTotalPrice}"/>
    </h:panelGroup>

    </h:panelGrid>

</h:form>
当我在输入字段中插入一些值时,我想重新计算总价。我现在有两个问题:我得到异常
serverError:class javax.el.MethodNotFoundException/pricing_calculator.xhtml@115136 listener=“#{pricingCalculator.calculateTotalPrice}”:找不到方法:com.web.common。PricingCalculator@22939533.calculateTotalPrice(javax.faces.event.AjaxBehaviorEvent)


当我插入新值时,前一个值设置为零。它没有被正确地记住。

@BalusC已经给了您答案,但更明确地说,这里引用了Oracle的Java EE 6教程(您应该阅读)中有关方法表达式的一段话:

方法表达式只能在标记属性中使用,也只能在 以下方法:

  • 对于单个表达式构造,其中bean指的是JavaBeans组件,方法指的是JavaBeans的方法 组成部分:

[……]

也就是说,将
getCalculateTotalPrice
重命名为
calculateTotalPrice

编辑:以下方法调用的预期签名之间也存在不一致:


  • 您到底不明白异常的哪一部分?它说它希望在提到的消息方法中找到,但您确实没有这样的方法。请检查
    。OP基本上用getter方法在1中犯了2个错误。
    @Named
    @ViewScoped
    public class PricingCalculator implements Serializable
    {
        private int computers;
        private float emailSupportIncidents;
        private float phoneSupportIncidents;
    
        private float totalPrice;
    
        // Prices for each component and service    
        private final float computers_price = 299;
        private final float emailSupportIncidents_price = 300;
        private final float phoneSupportIncidents_price = 150;
    
        public String getCalculateTotalPrice()
        {
            totalPrice = (computers_price * computers)
                + (emailSupportIncidents_price * emailSupportIncidents)
                + (phoneSupportIncidents_price * phoneSupportIncidents);
    
            String result = Float.toString(totalPrice);
            return result;
        }
    
        public int getComputers()
        {
            return computers;
        }
    
        public void setComputers(int computers)
        {
            this.computers = computers;
        }
    
        public float getEmailSupportIncidents()
        {
            return emailSupportIncidents;
        }
    
        public void setEmailSupportIncidents(float emailSupportIncidents)
        {
            this.emailSupportIncidents = emailSupportIncidents;
        }
    
        public float getPhoneSupportIncidents()
        {
            return phoneSupportIncidents;
        }
    
        public void setPhoneSupportIncidents(float phoneSupportIncidents)
        {
            this.phoneSupportIncidents = phoneSupportIncidents;
        }
    
        public float getTotalPrice()
        {
            return totalPrice;
        }
    
        public void setTotalPrice(float totalPrice)
        {
            this.totalPrice = totalPrice;
        }
    }