gpt4 book ai didi

jsf - Primefaces - commandButton 不起作用

转载 作者:行者123 更新时间:2023-12-04 00:01:41 28 4
gpt4 key购买 nike

我遇到了 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";
}

}
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>

非常感谢
安德烈

最佳答案

这是怎么回事?

你得到的是正确的行为。在 PrimeFaces 中, type="button"按钮的工作方式与在基本 HTML 中一样 - 它不会引起任何请求。如 PrimeFaces user's guide说:

Push buttons are used to execute custom javascript without causing an ajax/non-ajax request. To create a push button set type as "button".

<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}" />

你想得到什么?

如果您不想将所有表单发送到 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

...并且组件仅限于 process="@this"您只能获得:
Submit executed

希望有帮助。

关于jsf - Primefaces - commandButton 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737674/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com