我有一个简单的代码,可以在点击按钮(而不是提交按钮)时进行验证。无论我想做什么数据保存/处理,我都是通过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();
}
这并没有向用户发出任何消息,但是不会让刷新发生。
请让我知道我错过了什么。
答案 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
}