当前位置: 首页 > 知识库问答 >
问题:

命令按钮不工作

孙才捷
2023-03-14

我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法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>

非常感谢你,安德烈

共有3个答案

米景辉
2023-03-14

请检查您与bean的绑定。

bean字段应为String或非原始字段。

何兴学
2023-03-14

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

  • 这里有一篇关于如何以及何时使用它的文章:即时属性文章
高砚
2023-03-14

你得到的是正确的行为。在PrimeFaces中,类型="按钮"的按钮与基本超文本标记语言一样工作——它不会导致任何请求。正如PrimeFaces用户指南所说:

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

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

}

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

getValue

setValue: foobar

Submit executed

...组件仅限于process=“@this”时,您只能获得:

Submit executed

希望有帮助。

 类似资料:
  • 我想使用一个p:对话框,其中包含一些commandbutton,但我不能从命令按钮调用我的bean,也不知道为什么。 在xhtml页面上有两个表单,第一个表单包含一些内容,如面板、panelgrids、按钮等。第二个表单只包含我的对话框。 我的beanHandler(beanHandler)是ViewAccessScoped。此xhtml页面上的所有内容都在工作,只有我的p:面板不工作 如果我使用

  • 我在21点程序中无法让点击按钮正常工作。我尝试为setOnAction块中的hit按钮以及lambda编程操作,但是我得到了一个关于变量不是最终变量的错误。所以,我试过这样做,但我不认为我的变量会继续。这可能很简单。如果可以的话,请帮忙。谢谢

  • 我正在使用PF 5.2作为web应用程序。我想使用notificationBar驻留一些数据输入,并使用commandButton将这些输入数据触发到支持bean。因此,我在notificationBar中放置了一个commandButton,但actionListener没有调用backingbean方法。CommandButton的id为“filterBtn”。 这个xhtml页面代码如下所示

  • https://www . n11 . com/telefon-ve-akesuarlari/CEP-telefon u-akesuarlari 在这个网站中,我尝试点击(下一页按钮) 我想赶上这条线 我正在程序中编写此代码 我的问题是关于这个问题,它不起作用

  • 我有一个问题使添加到购物车按钮工作。不确定是哪一部分代码导致了这个问题。但是,问题的链接是:https://barkerbespoke.com/collections/tie-collection/products/black-wool 你有什么建议?

  • 问题内容: 当我单击一个按钮时,我想运行多种功能。例如,我希望我的按钮看起来像 当我执行此语句时,出现错误,因为我无法两次为参数分配内容。如何使命令执行多个功能。 问题答案: 您可以创建一个用于组合功能的通用功能,看起来可能像这样: 然后,您可以像这样创建按钮: