Xpages:使用JS进行客户端验证

时间:2014-08-07 07:03:42

标签: xpages

我有一个简单的代码,可以在点击按钮(而不是提交按钮)时进行验证。无论我想做什么数据保存/处理,我都是通过SSJS在服务器端进行的。

情况:如果我在客户事件alert("Hi")下写了一个简单的(onCLick),它会在点击后向我发出提醒,然后转到SSJS

但是,如果我尝试使用document.getElementByID("inputText1").value阅读任何字段,则不会响应点击,也不会执行上述行之后的alert()

尝试改变id传递方式为#{id:inputText1},但没有任何效果。

仅供参考:我正在对该按钮事件执行partialRefresh(),并且我必须停止处理未供应数据的唯一方法是使用下面定义的cancelPartialRefresh()(从堆栈溢出中获取此着名代码只要)。

function cancelPartialRefresh(){
       var response = facesContext.getExternalContext().getResponse();
       response.setHeader("X-XspRefreshId", "@none");
       response.reset();
       response.commitResponse();
       facesContext.responseComplete();
}

这并没有向用户发出任何消息,但是不会让刷新发生。

请让我知道我错过了什么。

3 个答案:

答案 0 :(得分:3)

document.getElementByID("inputText1").value

不适用于CSJS。你必须使用

document.getElementByID("#{id:inputText1}").value
带引号的

#{id:inputText1}在服务器端计算并返回实际ID,如“view:xxx:inputText1”。此id放在客户端代码中,必须用引号括起来,因此它是一个字符串参数。

答案 1 :(得分:0)

正如Knut已经提到的那样,总是使用#{id:comp}来获取xpage组件的Id。

Maby你需要这样的东西:

<xp:inputText
    id="inputText1"
    required="true"
    disableClientSideValidation="true">
    <xp:this.validators>
        <xp:validateRequired message="required!"></xp:validateRequired>
    </xp:this.validators>
</xp:inputText>
<xp:message
    id="message1"
    for="inputText1">
</xp:message>
<xp:button
    value="Validate"
    id="button1">
<xp:eventHandler
    event="onclick"
    submit="true"
    refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript://Serverside Validate}]]></xp:this.action>
    <xp:this.script><![CDATA[var value = dojo.byId("#{id:inputText1}").value;
        window.alert("Your value "+value+" will be validatet");]]></xp:this.script>
</xp:eventHandler>
</xp:button>

此代码将在输入值发送到ServerSide验证之前从inputText1中弹出输入的值。请注意,您必须禁用客户端验证,否则您将获得的唯一消息是&#34; required&#34;信息。如果您将return false;添加到代码中,则服务器端验证将不会获得执行!

答案 2 :(得分:0)

所有

非常感谢您的回复。最后,我可以使用Thomas Adrian的以下代码修复它。

var subject = x$("#{id:inputText1}").val(); 
if(subject==""){ 
        alert("Please enter description") 
        return false 
}