Jsf Primefaces-commandButton不工作

Jsf Primefaces-commandButton不工作,jsf,primefaces,Jsf,Primefaces,我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行 我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作 我使用的是PrimeFaces4.0、JDK7、Tomcat6和JSF2.0(Apache),但我认为Mojarra

我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行

我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作

我使用的是PrimeFaces4.0、JDK7、Tomcat6和JSF2.0(Apache),但我认为Mojarra也在使用

    SESSION:

package com.andre.bean;

public class AndreBean {

public void runSubmit() {
System.out.println("Submit executed");
}

public String test() {
System.out.println("Not submit executed");
return "true";
}

}

XHTML

多谢各位 安德烈

发生了什么事? 你得到的是正确的行为。在PrimeFaces中,带有type=“button”的按钮与基本HTML中的按钮一样工作-它不会引起任何请求。正如上面所说:

按钮用于执行自定义javascript,而不会导致 ajax/非ajax请求。要创建按钮,请将类型设置为“按钮”

如果您不限制console中执行的组件,则会得到:

getValue

setValue: foobar

Submit executed
…并且组件仅限于process=“@this”您只能获得:

Submit executed

希望有帮助。

有时候,解决方案只是简单地添加
immediate=“true”
,它改变了JSF生命周期中触发bean操作的点

  • 以下是一篇关于如何以及何时使用它的文章:

    • 请检查您与bean的绑定


      bean字段应该是字符串或非原语。

      尝试使用actionListener=“#{andreBean.test()}”process=“@this:test”。。感谢您的响应,刚刚尝试但没有成功,结果与以前相同。然而,当在测试方法中使用括号时,我遇到了一个解析错误,它只适用于“andreBean.test”。我读到了一些与EL有关的限制,我需要在这个项目中使用Tomcat版本6,这样EL的可用性就可以达到2.1。提前感谢您提供更多信息。如果您不想提交完整表单,您必须使用AJAX…我想我有一个限制,因为我需要使用Tomcat 6。当我在方法(andreBean.test())中使用括号时,我遇到了一个解析错误,当我删除括号时,我收到一条消息,说属性“test”在“andreBean”中不存在……死锁:(我在commandButton中使用了ajax,如下所示,使用括号而不是:其他建议?您不需要f:ajax。您可以在p:commandButton上设置ajax=“true”(这是默认值),然后使用actionListener=“#{andreBean.test}”您好,谢谢您的评论。我已经使用此链接[链接]上的建议解决了我的问题。)()我遇到了类似的问题,流程标签也起作用了。它最初被设置为@this,但后来我添加了我所有的组件id,所以看起来像这样,流程=@this,componentId1,componentId2。这些更改只对我有效,我没有添加immediate=true标志t00it有效,因为你进行了一些你没有进行的验证只要您没有看到,就可以看到代码中的任何p:消息。现在,当您添加immediate=true时,您将绕过验证并提交。
      <p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}" />
      
      <h:form id="test">
          <p:inputText value="#{andreBean.value}"/>
          <p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}" process="@this" />
      </h:form>
      
      public class AndreBean {
      
          private String value;
      
          public void runSubmit() {
              System.out.println("Submit executed");
          }
      
          public String getValue() {
              System.out.println("getValue");
              return value;
          }
      
          public void setValue(String value) {
              System.out.println("setValue: " + value);
              this.value = value;
          }
      
      }
      
      getValue
      
      setValue: foobar
      
      Submit executed
      
      Submit executed