如何将两个不同的方法添加到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 />
的methodOne
和methodTwo
?
答
最简单的解决方案是创建一个变量,在该变量上可以识别打开哪个页面。要设置此变量,请使用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>
答
的干净的解决方案是创建一个复合部件,并通过在通过方法表达作为属性
参见:
是封装在复合组件中的表单吗? – Yamada 2014-10-30 18:45:28
我在xhtml页面中有一个名为notificationForm.xthml的表单,我从另外两页使用这个页面 – 2014-10-30 19:20:03
您可以在'p:commandButton'中用'oncomplete =#{service.methodTwo}'尝试。 – 2014-10-31 05:28:04