我想要从两个输入域的输入,并同时计算和到另一个输入域(总数),但必须是可编辑的。我试过了(我删掉了一些对这个问题无用的代码):
<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中看到的问题是我要求和的两个字段的值为空。如何让模型变量在我写的时候被填满?我必须修改什么才能让计算结果立即写入总输入字段?
发布于 2015-10-01 11:53:49
而不是这样,您可以使用Ajax来实现以下功能:
<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的其他事件。
发布于 2016-07-22 06:42:49
中
<?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>
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;
}
}
发布于 2015-10-01 11:52:38
如果您想在服务器端使用插入的值进行一些计算,则必须首先(部分地)提交表单。您可以通过AJAX完成此操作,如下所示:
<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在客户端完成这项工作。
https://stackoverflow.com/questions/32886649
复制