我在commandButton上遇到了一个问题,它只在类型提交时才起作用。有人能看看,如果有解决办法,让我知道吗?下面的代码非常简单,并有建议来说明我所需要的。未执行方法test()。方法成功地执行runSubmit。
我需要在没有提交的情况下执行测试方法,因为原始页面确实有在提交期间执行的验证,而test()方法必须在没有提交的情况下执行,因为它是提交之前的初步操作。
我使用的是PrimeFaces 4.0、JDK 7、Tomcat 6和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
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:form id="test">
<p:commandButton id="ns" value="not submit" type="button" action="#{andreBean.test}" ajax="false"></p:commandButton>
<p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}"></p:commandButton>
</h:form>
</html>非常感谢安德烈
发布于 2013-11-03 22:32:27
到底怎么回事?
你得到的是正确的行为。在带有PrimeFaces的type=按钮中,“按钮”的工作方式与基本的type=一样--它不会导致任何请求。正如PrimeFaces用户指南所说:
按钮用于执行自定义的javascript ,而不引起ajax/non请求。若要创建按钮,请将其设置为“按钮”。 ”
如果您想要“交谈”bean,您需要使用type="submit“(在p:commandButton中这是默认的)。然而..。与HTML按钮的行为相反,在PrimeFaces中,这种提交不会强制重定向到新页面,但是所有通信都将由底层的AJAX请求处理。
因此,只有第二个按钮将执行bean的方法:
<p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}" />你可能想得到什么?
如果不想将所有表单发送到bean,则可以限制使用p:commandButton的"process“属性处理的组件的范围:
<h:form id="test">
<p:inputText value="#{andreBean.value}"/>
<p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}" process="@this" />
</h:form>使用下面的bean,您将看到不同之处:
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...and组件仅限于process="@this“,您只能得到:
Submit executed希望这能有所帮助。
发布于 2014-09-01 11:16:20
有时,解决方案只是简单地添加immediate="true",它改变了JSF中触发bean操作的点。
发布于 2015-02-06 10:18:02
请检查您与bean的绑定。
bean字段应该是字符串或非原语。
https://stackoverflow.com/questions/19737674
复制相似问题