Primefaces p:commandButton,未调用动作

use*_*789 15 jsf actionlistener primefaces jsf-2

我在Primefaces 3.2和JSF 2.1上遇到了一些麻烦.

我的代码是这样的:

<p:toolbar id="jeditortoolbar" styleClass="jeditortoolbar">
      <p:toolbarGroup align="left" height="25" style="height:25px">
        <p:commandButton type="button" title="#{msg.beenden}"/>
        <p:commandButton type="button" title="#{msg.neu}"/>
      </p:toolbarGroup>
</p:toolbar>
Run Code Online (Sandbox Code Playgroud)

当我看看Primefaces Showcase时,我的p:commandButton需要

actionListener="#{myBean.myActionMethod}"
Run Code Online (Sandbox Code Playgroud)

我的Bean需要一个类似的方法

public void myActionMethod(){}
Run Code Online (Sandbox Code Playgroud)

h:form我的p:toolbar标签周围有一个!

我的Bean是ViewScoped.

我的解决方法是在*.xhtml文件中

<p:commandButton type="button" title="#{msg.neu}" onclick="addNewEmptyFile()"/>
<p:remoteCommand name="addNewEmptyFile" update=":codeTabForm">
   <f:setPropertyActionListener value="#{true}" target="#{myBean.myEvent}"/>
</p:remoteCommand>
Run Code Online (Sandbox Code Playgroud)

在MyBean.java中

private String myEvent;

public void setMyEvent(String value){ myActionMethod();}
Run Code Online (Sandbox Code Playgroud)

这对我有用,但我认为这是非常脏的代码.

大家能帮帮我吗?

Ker*_*ğan 12

试试这个

Bean.java

@ManagedBean
@ViewScoped
public class Bean {

    public String testButtonAction() {
        System.out.println("testButtonAction invoked");
        return "anotherPage.xhtml";
    }

    public void testButtonActionListener(ActionEvent event) {
        System.out.println("testButtonActionListener invoked");
    }

}
Run Code Online (Sandbox Code Playgroud)

page.xhtml

<p:toolbar>
  <p:toolbarGroup>
    <p:commandButton action="#{bean.testButtonAction}"/>
    <p:commandButton actionListener="#{bean.testButtonActionListener}"/>
  </p:toolbarGroup>
</p:toolbar>
Run Code Online (Sandbox Code Playgroud)

  • 我真的希望有一天IDE可以警告开发人员这个而不是简单地忽略方法签名不匹配;-) (6认同)
  • 删除type ="button"解决了我的问题 (2认同)