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