首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将两个primefaces输入字段求和为另一个

将两个primefaces输入字段求和为另一个
EN

Stack Overflow用户
提问于 2015-10-01 19:37:15
回答 3查看 1.9K关注 0票数 0

我想要从两个输入域的输入,并同时计算和到另一个输入域(总数),但必须是可编辑的。我试过了(我删掉了一些对这个问题无用的代码):

代码语言:javascript
代码运行次数:0
运行
复制
<p:inputText id="field1"
    value="#{ModelBean.object.field1}"
    onkeydown="#{BackingBean.updateTotal()}">
</p:inputText>

<p:selectOneMenu id="field2" required="true"
    value="#{ModelBean.object.field2}">
    <f:selectItem itemLabel="22 %" itemValue="22" />
    <f:selectItem itemLabel="10 %" itemValue="10" />
    <f:selectItem itemLabel="4 %" itemValue="4" />
    <f:selectItem itemLabel="0 %" itemValue="0" />
</p:selectOneMenu>


<!-- TOTAL -->

<p:inputText id="total"
    value="#{ModelBean.object.total}">
</p:inputText>

如您所见,我将计算任务委托给了BackingBean.update()方法。它更新total值并将其设置到bean的total字段中。我在debug中看到的问题是我要求和的两个字段的值为空。如何让模型变量在我写的时候被填满?我必须修改什么才能让计算结果立即写入总输入字段?

EN

回答 3

Stack Overflow用户

发布于 2015-10-01 19:53:49

而不是这样,您可以使用Ajax来实现以下功能:

代码语言:javascript
代码运行次数:0
运行
复制
 <p:inputText id="field1" value="#{ModelBean.object.field1}">
          <f:ajax event="change" execute="@this" render="total" listener="#{BackingBean.updateTotal}"></ajax>
 </p:inputText>

 <p:selectOneMenu id="field2" required="true"
          value="#{ModelBean.object.field2}">
          <f:selectItem itemLabel="22 %" itemValue="22" />
          <f:selectItem itemLabel="10 %" itemValue="10" />
          <f:selectItem itemLabel="4 %" itemValue="4" />
          <f:selectItem itemLabel="0 %" itemValue="0" />
          <f:ajax event="change" execute="@this" render="total" listener="#{BackingBean.updateTotal}"></ajax>
 </p:selectOneMenu>


<!-- TOTAL -->

 <p:inputText id="total" value="#{ModelBean.object.total}">
 </p:inputText>

我认为您需要将ajax放在这两个组件中,因为要根据这两个组件的值获得sum。如果你不想使用"Change“事件,那么你可以使用ajax的其他事件。

票数 1
EN

Stack Overflow用户

发布于 2016-07-22 14:42:49

  1. 创建项目并将其包含在

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
      <h:form>
    <h:panelGrid columns="3">
        <h:outputText value="Keyup: " />
        <p:inputText id="counter2" value="#{listenerView.a}">   
            <p:ajax event="keyup" update="out" listener="#{listenerView.handleKeyEvent}"/>
        </p:inputText>
        <p:inputText id="counter" value="#{listenerView.b}">
            <p:ajax event="keyup" update="out" listener="#{listenerView.handleKeyEvent}" />
        </p:inputText>
        <h:outputText id="out" value="#{listenerView.c}" />
    </h:panelGrid>
</h:form>
    </h:body>
</html>

代码语言:javascript
代码运行次数:0
运行
复制
package org.primefaces.showcase.view.ajax;
 
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
 
@ManagedBean
@ViewScoped
public class ListenerView {
     
    private String text;
    private int a;
    private int b;
    private int c;
 
    public String getText() {
        return text;
    }
    public void setText(String text) {
        this.text = text;
    }
     
    public void handleKeyEvent() {
        c=a+b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public int getC() {
        return c;
    }

    public void setC(int c) {
        this.c = c;
    }
}

票数 1
EN

Stack Overflow用户

发布于 2015-10-01 19:52:38

如果您想在服务器端使用插入的值进行一些计算,则必须首先(部分地)提交表单。您可以通过AJAX完成此操作,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<p:inputText id="field1"
    value="#{ModelBean.object.field1}">
    <p:ajax event="keyup" listener="#{BackingBean.updateTotal}" update="total"/>
</p:inputText>

<p:selectOneMenu id="field2" required="true"
    value="#{ModelBean.object.field2}">
    <f:selectItem itemLabel="22 %" itemValue="22" />
    <f:selectItem itemLabel="10 %" itemValue="10" />
    <f:selectItem itemLabel="4 %" itemValue="4" />
    <f:selectItem itemLabel="0 %" itemValue="0" />
    <p:ajax listener="#{BackingBean.updateTotal}" update="total"/>
</p:selectOneMenu>

<!-- TOTAL -->
<p:inputText id="total"
    value="#{ModelBean.object.total}">
</p:inputText>

如果计算所需的所有信息都在当前视图中可用,并且计算非常简单,就像这里显示的那样,您还可以考虑完全通过纯JavaScript在客户端完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32886649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档