xpages 2从必填字段进行部分刷新

xpages 2从必填字段进行部分刷新,xpages,Xpages,我有一个inputText,它是我文档上的必填字段 我还检查了未经验证的过程数据(从服务器选项卡…)。但是仍然没有进行刷新。好的,首先要做的是打开工具箱,查看网络流量。这将帮助您了解正在发生的事情。您可以在FireFox中使用FireBug,也可以在Google Chrome中使用开发者工具 上面的代码段发生了什么网络流量 编辑: 仍在等待听到产生了什么网络流量 但只要看看你的代码…-请尝试设置submit=“true”。我查看了一些代码,不确定是否需要额外的空参数:-) 你能解释一下你想得

我有一个inputText,它是我文档上的必填字段



我还检查了未经验证的
过程数据
(从服务器选项卡…)。但是仍然没有进行刷新。

好的,首先要做的是打开工具箱,查看网络流量。这将帮助您了解正在发生的事情。您可以在FireFox中使用FireBug,也可以在Google Chrome中使用开发者工具

上面的代码段发生了什么网络流量

编辑:

仍在等待听到产生了什么网络流量

但只要看看你的代码…-请尝试设置submit=“true”。我查看了一些代码,不确定是否需要额外的空参数:-)

你能解释一下你想得到什么吗

编辑

好的,我知道你想要什么了。我快速浏览了一些代码。我做的和你做的不完全一样。但是,当我嵌套部分刷新时,我通常是这样做的:

<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>


因此,对于“第一次”刷新,我使用内置标记,完成后,我添加第二次作为普通JavaScript。我知道这是一个带有partialRefreshGet的示例(由于开销较小,如果可能的话,我更喜欢使用它)。但也许它能给你一个想法……

好的,首先要做的是打开工具箱,看看网络流量。这将帮助您了解正在发生的事情。您可以在FireFox中使用FireBug,也可以在Google Chrome中使用开发者工具

上面的代码段发生了什么网络流量

编辑:

仍在等待听到产生了什么网络流量

但只要看看你的代码…-请尝试设置submit=“true”。我查看了一些代码,不确定是否需要额外的空参数:-)

你能解释一下你想得到什么吗

编辑

好的,我知道你想要什么了。我快速浏览了一些代码。我做的和你做的不完全一样。但是,当我嵌套部分刷新时,我通常是这样做的:

<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>


因此,对于“第一次”刷新,我使用内置标记,完成后,我添加第二次作为普通JavaScript。我知道这是一个带有partialRefreshGet的示例(由于开销较小,如果可能的话,我更喜欢使用它)。但是,也许它可以给您一个想法……

您在第二篇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>

您在第二篇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>

通过设置submit=“false”,可以防止eventHandler本身触发任何服务器端处理。这意味着disableValidators=“true”是不相关的,因为XPages生命周期不是从eventHandler处理的

相反,刷新是从客户端代码XSP.partialRefreshPost生成的。它没有禁用验证的选项,如本文所述。disableValidators=“true”不会也不能影响partialRefreshPost的处理。所以很有可能您的验证仍在运行。要确认这一点,请在初始刷新区域中添加错误面板

我不确定部分刷新可能有效

在这些场景中,我通常的方法是刷新一个区域,该区域包含您希望刷新的两个区域。然后设置submit=“true”和disableValidators=“true”。但请记住,即使禁用了验证,数据转换仍会被检查,因此,如果在数字字段中输入文本值,部分刷新仍将失败。

通过设置submit=“false”,可以防止任何服务器端处理由eventHandler本身触发。这意味着disableValidators=“true”是不相关的,因为XPages生命周期不是从eventHandler处理的

相反,刷新是从客户端代码XSP.partialRefreshPost生成的。它没有禁用验证的选项,如本文所述。disableValidators=“true”不会也不能影响partialRefreshPost的处理。所以很有可能您的验证仍在运行。要确认这一点,请在初始刷新区域中添加错误面板

我不确定部分刷新可能有效


在这些场景中,我通常的方法是刷新一个区域,该区域包含您希望刷新的两个区域。然后设置submit=“true”和disableValidators=“true”。但请记住,即使禁用了验证,数据转换仍会被检查,因此如果在数字字段中输入文本值,部分刷新仍将失败。

如果我设置submit=“true”,服务器将进行完整更新。我不想对页面进行全面更新,只需对2个面板进行2次部分刷新。根据上面描述的inputText值,我试图隐藏/显示位于两个面板上的一些元素。仅使用一个partialRefreshPost进行尝试,看看是否有效/是否生成ajax请求。submit=“true”不会对页面进行完整更新,refreshMode=“full”控制该更新。