我有一个inputText,这是我的Document上的必填字段。
<xp:inputText value="#{Cdoc.txt_NumeCompanie}" id="txt_NumeCompanie"
required="true" defaultValue="#{javascript:param.value}">
<xp:this.validators>
<xp:validateRequired message="Numele companiei este obligatoriu." loaded="true">
</xp:validateRequired>
</xp:this.validators>
<xp:eventHandler event="onchange" submit="false" disableValidators="true">
<xp:this.script><![CDATA[ XSP.partialRefreshPost("#{id:scrollDiv}", {
onComplete: function() {
XSP.partialRefreshPost("#{id:pers}");
}
});
]]></xp:this.script>
</xp:eventHandler>
</xp:inputText>
我还检查了Process data without validation
(来自“服务器”标签...)。但仍然没有刷新。
答案 0 :(得分:4)
您没有在第二个partialRefreshPost中包含所需的第二个参数。试试这个:
XSP.partialRefreshPost("#{id:scrollDiv}", {
onComplete: function() {
XSP.partialRefreshPost("#{id:pers}", {});
}
});
更新:您可以使用eventHandler的onComplete事件来运行第二次部分刷新。因此,使用第一个组件的传统部分刷新,然后通过onComplete事件运行第二次部分刷新:
<xp:inputText value="#{Cdoc.txt_NumeCompanie}" id="txt_NumeCompanie" required="true" defaultValue="#{javascript:param.value}">
<xp:this.validators>
<xp:validateRequired message="Numele companiei este obligatoriu." loaded="true">
</xp:validateRequired>
</xp:this.validators>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="scrollDiv">
<xp:this.onComplete><![CDATA[XSP.partialRefreshPost("#{id:pers}", {});]]></xp:this.onComplete>
</xp:eventHandler>
</xp:inputText>
答案 1 :(得分:3)
通过设置submit =“false”,您可以防止eventHandler本身触发任何服务器端处理。这意味着disableValidators =“true”无关紧要,因为没有从eventHandler处理XPages生命周期。
而是从客户端代码XSP.partialRefreshPost生成刷新。这没有禁用验证的选项,如How to disable validators using the XSP.partialRefreshPost method?所述。 disableValidators =“true”不会也不会影响partialRefreshPost的处理。所以很有可能你的验证仍在运行。要确认这一点,请将错误面板添加到初始刷新区域。
partialRefreshGet可能有效,我不确定。
我在这些场景中的常用方法是刷新包含您要刷新的区域的单个区域。然后设置submit =“true”和disableValidators =“true”。但请记住,即使禁用验证,仍会检查数据转换,因此如果在数字字段中输入文本值,则部分刷新仍会失败。
答案 2 :(得分:0)
好的,首先要做的是打开工具箱并查看网络流量。这将帮助您了解正在发生的事情。您可以在FireFox中使用FireBug,也可以在Google Chrome中使用开发人员工具。
上述代码段会出现什么网络流量?
<强> 编辑: 强>
还在等待听到网络流量的产生......
但只是查看你的代码...... - 尝试设置submit =&#34; true&#34;。我看了一下我的一些代码,我不确定是否需要额外的空参数: - )
你能解释一下你想要获得什么吗?
<强> 修改 强>
好的,我知道你想要什么。我在一些代码中快速浏览了一下。我的表现与你完全不同。但是,当我嵌套部分刷新时,我通常会这样做:
<xp:button id="button1"
styleClass="btn btn-danger btn-lg#{FishingTripEdit.typeInput eq '1' ? ' inActive' : ''}">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial"
refreshId="inputTypeSelected" disableValidators="true">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:MyBean.setData('0')}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
<xp:this.onComplete><![CDATA[XSP.partialRefreshGet("#{id:buttonTopHolder}")]]></xp:this.onComplete>
<xp:this.script><![CDATA[return document.getElementById("#{id:triggerAsk}").value!=='1' ? true : confirm("Sure?")]]></xp:this.script>
</xp:eventHandler>
</xp:button>
所以对于&#34;第一&#34;刷新我使用内置标记 - 而onComplete我将第二个添加为纯JavaScript。我知道这是一个带有partialRefreshGet的例子(由于开销较少,我更喜欢使用它)。但也许它可以给你一个想法......