600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ADF:弹出窗口 对话框和输入组件

ADF:弹出窗口 对话框和输入组件

时间:2019-11-13 23:31:36

相关推荐

ADF:弹出窗口 对话框和输入组件

在本文中,当我们有一个af:popup包含af:dialog并在其中包含输入组件时,我想着重介绍一个非常常见的用例。 在实现此用例时,需要注意一些陷阱。

让我们考虑一个简单的示例:

<af:popup id="p1" contentDelivery="lazyUncached"><af:dialog id="d2" title="Dialog" ><af:inputText value="#{TheBean.firstName}" label="First Name" id="it1"/><af:inputText value="#{TheBean.lastName}" label="Last Name" id="it2"/></af:dialog></af:popup>

这里最有趣的是弹出窗口的属性contentDelivery,该属性设置为lazyUncached。 这样可以防止弹出窗口缓存提交的输入值,并强制其从每个请求的模型中获取值,而不是使用缓存中的值。

让我们将示例变得更加复杂。 在姓氏的设置器中,我们将引发一个异常:

public void setLastName(String lastName) throws Exception { this.lastName = lastName; throw new Exception("This last name is bad");}

因此,显然,如果我们尝试提交对话框,则会得到以下信息:

输入值不能提交给模型,它们将存储在输入组件的局部值中。 即使我们按“取消”按钮,也不会清除这些本地值,并且在子序列请求期间将使用这些值。 为了防止这种行为,我们必须将弹出窗口的resetEditableValues属性设置为whenCanceled。 像这样:

<af:popup id="p1" contentDelivery="lazyUncached"resetEditableValues="whenCanceled"><af:dialog id="d2" title="Dialog" ><af:inputText value="#{TheBean.firstName}" label="First Name" id="it1"/><af:inputText value="#{TheBean.lastName}" label="Last Name" id="it2"/></af:dialog> </af:popup>

让我们来看一个带有自定义按钮的af:dialog的示例:

<af:popup id="p1" contentDelivery="lazyUncached"resetEditableValues="whenCanceled"binding="#{TheBean.popup}"><af:dialog id="d2" title="Dialog" type="none"><af:inputText value="#{TheBean.firstName}" label="First Name" id="it1"/><af:inputText value="#{TheBean.lastName}" label="Last Name" id="it2"/><f:facet name="buttonBar"><af:panelGroupLayout layout="horizontal" id="pgl1"><af:button text="Ok" id="b2" actionListener="#{TheBean.buttonActionListener}"/><af:button text="Cancel" id="b3" immediate="true"actionListener="#{TheBean.buttonActionListener}"/></af:panelGroupLayout> </f:facet></af:dialog> </af:popup>

因此,使用以下actionListener有两个自定义按钮“ Ok”和“ Cancel”:

public void buttonActionListener(ActionEvent actionEvent) {getPopup().hide();}

在这种情况下,resetEditableValues不起作用,并且在按“取消”按钮时不会清除输入组件的本地值。 有几个选项可以解决此问题。

第一个是将af:resetListener添加到“取消”按钮:

<af:button text="Cancel" id="b3" immediate="true"actionListener="#{TheBean.buttonActionListener}"><af:resetListener type="action"/></af:button>

第二个选项是取消弹出窗口,而不仅仅是将其隐藏在“取消”按钮动作侦听器中:

<af:button text="Ok" id="b2" actionListener="#{TheBean.buttonActionListener}"/><af:button text="Cancel" id="b3" immediate="true"actionListener="#{TheBean.cancelButtonActionListener}"/>

public void cancelButtonActionListener(ActionEvent actionEvent) {getPopup().cancel();}

而已!

翻译自: //08/adf-popup-dialog-and-input-components.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。