如何将两个不同的方法添加到JSF中的相同命令按钮

问题描述:

我有一个名为“Send”的按钮,该按钮具有一个窗体,并且使用来自两个不同页面的此窗体发送邮件。 从我输入此表格的第一页开始,我必须使用methodOne。 从第二页我输入相同的表格,我必须使用methodTwo如何将两个不同的方法添加到JSF中的相同命令按钮

评判的例子是这样的:

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> 

我想使用使用两种方法型动物相同的形式。

如何使用相同的action attrubite标签<p:commandButton />methodOnemethodTwo

+0

是封装在复合组件中的表单吗? – Yamada 2014-10-30 18:45:28

+0

我在xhtml页面中有一个名为notificationForm.xthml的表单,我从另外两页使用这个页面 – 2014-10-30 19:20:03

+0

您可以在'p:commandButton'中用'oncomplete =#{service.methodTwo}'尝试。 – 2014-10-31 05:28:04

最简单的解决方案是创建一个变量,在该变量上可以识别打开哪个页面。要设置此变量,请使用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> 

的干净的解决方案是创建一个复合部件,并通过在通过方法表达作为属性

参见: