我使用p:remoteCommand
,它适用于update
和process
,但不调用action
方法和actionListener
Xhtml代码
<h:form id="mainForm">
<h:outputLabel id="tempAge" value="#{remoteBean.tempAge}"/>
<h:inputText id="age" value="#{remoteBean.age}" onkeypress="callRem()">
<f:validateLongRange minimum="18"/>
</h:inputText>
<script type="text/javascript">
var timex=0;
function callRem(){
clearTimeout(timex);
timex = setTimeout("remote()",2000);
}
</script>
<p:remoteCommand name="remote"
process="age"
update="tempAge"
action="#{remoteBean.act}"
actionListener="#{remoteBean.listen}">
</p:remoteCommand>
</h:form>
托管Bean代码
@ManagedBean
public class RemoteBean {
private int age=18;
private int tempAge=20;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
System.out.println("Setting age :"+age);
}
public int getTempAge() {
return tempAge;
}
public void setTempAge(int tempAge) {
this.tempAge = tempAge;
}
public void act(){
System.out.println("in action()");
tempAge+=age+2;
}
public void listen(ActionEvent event) {
System.out.println("in Action Listener");
tempAge+=age+2;
}
}
我无法弄清楚我在哪里做错了,可能是我写过的Javascript代码。
如果有人面对并解决了同样的问题,请帮助。
使用:Primefaces 3.5
答案 0 :(得分:9)
我试过你的例子,发现了问题。 当你只处理age(process =“age”)时,它只执行age输入并忽略remoteCommand actionListener和action。 所以你可以把它改成:
process="@form"
或
process="@this age"
为我工作。
PS。我在这里使用了View范围。