不为p:remoteCommand调用Action和ActionListener

时间:2013-09-06 06:40:49

标签: javascript jsf primefaces

我使用p:remoteCommand,它适用于updateprocess,但不调用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

1 个答案:

答案 0 :(得分:9)

我试过你的例子,发现了问题。 当你只处理age(process =“age”)时,它只执行age输入并忽略remoteCommand actionListener和action。 所以你可以把它改成:

process="@form" 

process="@this age" 

为我工作。

PS。我在这里使用了View范围。