Jsf 关闭带有错误值的对话框时未调用ADF弹出取消侦听器
问题是当我在对话框组件的输入框中输入一些负值时,验证器抛出类似“不允许使用负数”的错误。该对话框现在有一个标有红色边框的错误输入框,我决定在对话框外部单击以关闭它并重置输入框,但inputBox不会重置,如果我按Esc键或Ok按钮,则只调用popupCanceledListener并重置inputBox。下面是代码,其中包含一个带有对话框和输入框的弹出窗口 JSF代码:Jsf 关闭带有错误值的对话框时未调用ADF弹出取消侦听器,jsf,richfaces,oracle-adf,Jsf,Richfaces,Oracle Adf,问题是当我在对话框组件的输入框中输入一些负值时,验证器抛出类似“不允许使用负数”的错误。该对话框现在有一个标有红色边框的错误输入框,我决定在对话框外部单击以关闭它并重置输入框,但inputBox不会重置,如果我按Esc键或Ok按钮,则只调用popupCanceledListener并重置inputBox。下面是代码,其中包含一个带有对话框和输入框的弹出窗口 JSF代码: <af:popup contentDelivery="lazyUncached" autoCancel="enabled
<af:popup contentDelivery="lazyUncached" autoCancel="enabled"
popupCanceledListener="#{pageFlowScope.testBean.handleResetPopup}"
childCreation="deferred" id="testPopup">
<af:dialog type="none" modal="false"
id="Dlg1">
<af:inputText label="DECIMAL PLACES"
columns="2"
validator="#{pageFlowScope.testBean.validateDecimalPlaceValue}"
value="#{pageFlowScope.testBean.decimalPlace}"
id="input1" autoSubmit="true"></af:inputText>
<f:facet name="acceptNFChange">
<af:commandButton text="OK" id="cb1"
actionListener="#{pageFlowScope.testBean.handleOkFromPopup}"
partialSubmit="true"></af:commandButton>
</f:facet>
</af:dialog>
</af:popup>
问题:在对话框外部单击以关闭对话框并重置输入框时,不会调用popupCanceledListener。最好的方法是使用类型为popupClosed的客户端侦听器。下面是您的代码示例:
<af:popup contentDelivery="lazyUncached" autoCancel="enabled"
popupCanceledListener="#{pageFlowScope.testBean.handleResetPopup}"
childCreation="deferred" id="testPopup">
<af:dialog type="none" modal="false"
id="Dlg1">
<af:inputText label="DECIMAL PLACES"
columns="2"
validator="#{pageFlowScope.testBean.validateDecimalPlaceValue}"
value="#{pageFlowScope.testBean.decimalPlace}"
id="input1" autoSubmit="true"></af:inputText>
<f:facet name="acceptNFChange">
<af:commandButton text="OK" id="cb1"
actionListener="#{pageFlowScope.testBean.handleOkFromPopup}"
partialSubmit="true"></af:commandButton>
</f:facet>
</af:dialog>
<af:clientListener type="popupClosed" method="popupCloseClientListener"/>
<af:serverListener type="popupClosedEvent" method="#{pageFlowScope.testBean.handlePopupClosed}"/>
</af:popup>
然后您需要在JSF脚本的某个地方编写:
<script>
function popupCloseClientListener(event) {
component = event.getSource();
AdfCustomEvent.queue(component,
"popupClosedEvent",
{payload:component.getSubmittedValue()},
true);
event.cancel();
}
</script> ]]>
函数popupCloseClientListener(事件){
component=event.getSource();
ADFCustomeEvent.queue(组件,
“popupClosedEvent”,
{payload:component.getSubmittedValue()},
正确的);
event.cancel();
}
]]>
通过这种方式,您可以始终正确地处理来自客户端的弹出关闭事件。并实现您所需的所有服务器逻辑。此链接中提供的解决方案对我的场景很好。您可以调查自动取消属性是否影响此操作。将自动取消属性更改为disabled,并且似乎不影响它。您的bean方法名称与JSF方法调用不匹配。@32U。。这是一个拼写错误。另一种方法是:在decimalPlace的backingbean中的setter中,不使用validator,而是在那里进行验证。如果出现问题,请弹出您自己的弹出窗口或在当前弹出窗口中显示错误文本,并像在handleResetPopup方法中一样清除输入文本。您是否尝试在对话框外部单击以关闭它,并查看是否调用了handlePopupClosed方法?,,我已更新了问题的更多详细信息。看一看,然后尝试你发布的相同代码。你提供的代码对我不起作用。
<script>
function popupCloseClientListener(event) {
component = event.getSource();
AdfCustomEvent.queue(component,
"popupClosedEvent",
{payload:component.getSubmittedValue()},
true);
event.cancel();
}
</script> ]]>