xpages 2从必填字段中部分刷新

时间:2014-11-14 12:45:17

标签: xpages

我有一个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(来自“服务器”标签...)。但仍然没有刷新。

3 个答案:

答案 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的例子(由于开销较少,我更喜欢使用它)。但也许它可以给你一个想法......