【问题标题】:How To add two differents method to the same commandButton in JSF如何在 JSF 中向同一个 commandButton 添加两个不同的方法
【发布时间】:2014-12-26 21:19:51
【问题描述】:

我在一个包含表单的页面中有一个名为“发送”的按钮,我使用来自两个不同页面的这个表单来发送邮件。 从我进入此表格的第一页开始,我必须使用methodOne。 从第二页我进入相同的表格,我必须使用methodTwo

方法示例如下:

public Navigation methodOne(){
    return Navigation.NAVIG_ONE;
}

public Navigation methodTwo(){
    return Navigation.NAVIG_TWO;
}

和表格示例:

<h:form>
    <p:outputLabel id="email" value="#{service.Mail}"/>
    <p:inputText  id="subject" value="#{service.Subject}"/>
    <p:inputTextarea  id="body" value="#{service.Body}" />


    <p:commandButton value="send" action="#{service.methodOne}" />
</h:form>

我想使用相同的表单来使用两种不同的方法。

标签&lt;p:commandButton /&gt;action属性如何使用methodOnemethodTwo

【问题讨论】:

  • 您的表单是否封装在复合组件中?
  • 我在一个名为 notificationForm.xthml 的 xhtml 页面中有表单,我使用其他两个页面中的这个页面
  • 你可以试试oncomplete=#{service.methodTwo} in p:commandButton
  • oncomplete - 当 ajax 请求完成并且不能调用 bean 方法时执行客户端回调
  • @0x5a4d:虽然在这种情况下这将是一个 hack,但您可以调用例如回调中的 PrimeFaces 远程命令(或类似命令)

标签: jsf primefaces navigation xhtml commandbutton


【解决方案1】:

最简单的解决方案是创建一个变量,您可以在该变量上识别打开的页面。要设置此变量,请使用 this 之类的内容。该变量可以简单地存储页码,如 1,2 或页面名称,如 pageOne、pageTwo。创建一个只检查这个变量的方法:

public Navigation navigateMethod(){
    switch (page) {
    case "pageOne":
        return Navigation.NAVIG_ONE;
        break;

    case "pageTwo":
        return Navigation.NAVIG_TWO;
        break;

    default:
        return Navigation.DEFAULT
        break;
    }
}

和你的表格:

<h:form>
    <p:outputLabel id="email" value="#{service.Mail}"/>
    <p:inputText  id="subject" value="#{service.Subject}"/>
    <p:inputTextarea  id="body" value="#{service.Body}" />


    <p:commandButton value="send" action="#{service.navigateMethod}">
    </p:commandButton>
</h:form>

【讨论】:

    【解决方案2】:

    最干净的解决方案是创建一个复合组件并将方法表达式作为属性传入

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      相关资源
      最近更新 更多