我遇到了commandButton的问题,它只在提交类型时才有效.有人可以看看,如果有解决方案让我知道吗?下面的代码非常简单,并且有建议说明我需要的东西.方法test()未执行.方法runSubmit成功执行.
我需要在没有提交的情况下执行测试方法,因为原始页面确实具有在提交期间执行的验证,test()方法必须在没有提交的情况下执行,因为它是提交之前的初步操作.
我正在使用PrimeFaces 4.0,JDK 7,Tomcat 6和JSF 2.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";
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
非常感谢安德烈
ppa*_*wel 33
你得到的是正确的行为.在PrimeFaces按钮中,type ="button"的工作方式与基本HTML相同 - 它不会引起任何请求.正如PrimeFaces用户指南所说:
按钮用于执行自定义javascript 而不会导致ajax/non-ajax请求.要创建按钮设置类型为"按钮".
Run Code Online (Sandbox Code Playgroud)<p:commandButton type="button" value="Alert" onclick="alert('Prime')" />
如果你想"与bean对话",你需要使用type ="submit"(这是p:commandButton中的默认值).但是......与HTML中的提交按钮行为相反,在PrimeFaces中,此类提交不会强制重定向到新页面,但所有通信都将由基础AJAX请求处理.
因此,只有你的第二个按钮才会执行bean的方法:
<p:commandButton id="s" value="submit" action="#{andreBean.runSubmit}" />
Run Code Online (Sandbox Code Playgroud)
如果您不想将所有表单发送到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>
Run Code Online (Sandbox Code Playgroud)
使用以下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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不限制在控制台中执行的组件,您将得到:
getValue
setValue: foobar
Submit executed
Run Code Online (Sandbox Code Playgroud)
......并且组件仅限于process ="@ this",你只得到:
Submit executed
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
55000 次 |
| 最近记录: |