gpt4 book ai didi

javascript - 升级到 Primefaces 3.5 后,remoteCommand 无法正常工作

转载 作者:行者123 更新时间:2023-11-28 09:18:38 29 4
gpt4 key购买 nike

从 2.2.1 升级后,我无法再在对话框组件内显示 View 范围支持 bean 中的一些数据。弹出对话框,但来自 bean 的数据设置为 null。

问题似乎是按钮的远程命令调用了 javascript,该 javascript 再次调用了对话框小部件上的 show 方法。渲染响应阶段在整个过程中被调用两次(恢复 View 阶段仅被调用一次)。第一次使用正确的值,第二次使用空值。

如果我更改 onsucess 属性以直接显示对话框:

<p:remoteCommand name="lazyload" onsuccess="confirmdialog.show();"
update=":confirm" >

对话框正确显示值。如果我改为使用onsuccess 属性中的handleConfirm 脚本并注释掉“return true;”在 javascript 中,对话框还显示值。渲染阶段现在只调用一次。

任何关于为什么这会触发额外渲染阶段的想法都将受到高度赞赏。

我有点不愿意删除 JavaScript。这是前同事的代码,我在应用程序中找不到任何设置 JavaScript 数据参数的内容。我有点不确定原因是否是我缺乏理解或可疑代码。警报(数据.文本);返回未定义。

代码:

BuyProduct.xhtml 包含远程命令:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:comp="http://java.sun.com/jsf/composite/components">


<ui:include src="/confirmOrder.xhtml"/>

<h:form>
<p:commandButton disabled="#{productsearch.hasCP == false}"
onclick="if(canhide == false) {return false;} if(submitelement!=this||cansubmit==false) { cansubmit = false; submitelement=this; lazyload(); return false;} cansubmit = false; submitelement=null; canhide=false; loading.show(); return true;"
ajax="false" value="${msgs.order}"
actionListener="#{cp.PerformSearch}"
action="/services/cPReply.xhtml">
<f:setPropertyActionListener value="#{confirmorder.targetGateway}" target="#{cp.gateway}" />
<f:setPropertyActionListener value="#{productsearch.code}" target="#{cp.code}" />
<f:setPropertyActionListener value="#{productsearch.registerId}" target="#{cp.registerId}" />
</p:commandButton>
<p:remoteCommand name="lazyload" onsuccess="return handleConfirm(data);" update=":confirm" >
<f:setPropertyActionListener value="#{productsearch.cPGW.gateway_id}" target="#{confirmorder.gatewayId}" />
<f:setPropertyActionListener value="CP" target="#{confirmorder.serviceName}" />

</p:remoteCommand>

confirmOrder.xhtml 包含 JavaScript 和对话框:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">

<script>
var cansubmit = false;
var submitelement = null;

function handleConfirm(data)
{
if(data.getElementsByTagName("error") != null &amp;&amp; data.getElementsByTagName("error")[0] != null) {
sessiontimeout.show();
return false;
}
else {

confirmdialog.show();
}

return true;
}

</script>


<p:dialog header="${msgs.buyProducts}" widgetVar="confirmdialog" id="confirmdialogiden"
modal="true" resizable="false" width="700" dynamic="true">
<h:panelGrid id="confirm">
<f:view beforePhase="#{confirmorder.beforePhase}" afterPhase="#{confirmorder.afterPhase}">
<ui:debug hotkey="x"></ui:debug>
<h:panelGrid id="noProductSelected" rendered="#{confirmorder.size==false}">
${msgs.noProductSelected}
</h:panelGrid>
<h:panelGrid id="productSelected" columns="2" rules="cols" rendered="#{confirmorder.size}" >
<h:panelGrid width="400" id="productSelectedSub">

<b>${msgs.products}</b>

<p:dataList value="#{confirmorder.products}" var="car">
#{car.product_description}, #{car.price_nok}
</p:dataList>

<p:separator />
<b>${msgs.amount} </b>
<h:outputText id="total" value="#{confirmorder.sum} " />
</h:panelGrid>

</h:panelGrid>
</h:panelGrid>
</:dialog>

Primefaces 3.5 |莫贾拉 2.1.19 | Weblogic 10.3.3

最佳答案

在这种情况下,您应该从 onsuccess 中删除 return 值。返回 false 将取消默认的 DOM 更新过程,所以我认为这在你的情况下是个问题。

关于javascript - 升级到 Primefaces 3.5 后,remoteCommand 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293980/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com