我遇到了一些服务器端验证的问题,我不知道这是否是 XPages 中的预期行为,或者我是否在这里遗漏了一些简单的东西。
我有一个具有计算验证公式的字段 - 基本上,在设置 viewScope 变量时它成为必需的。
我的提交按钮设置 viewScope 并进行完全刷新。
我希望提交表单,对验证公式进行评估,如果失败,将显示验证失败。但是当我点击我的提交按钮时,表单提交没有错误。如果我再次单击它,验证将按预期失败。
为了说明我的问题,我创建了一个简单的示例:
<xp:inputText id="inputText1" required="#{javascript:viewScope.validate}">
<xp:this.validators>
<xp:validateRequired message="This field is required."></xp:validateRequired>
</xp:this.validators>
</xp:inputText>
 
<xp:button value="Submit" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="false" save="true">
<xp:this.action><![CDATA[#{javascript:viewScope.validate=true;}]]></xp:this.action>
<xp:this.script><![CDATA[dojo.attr(dojo.byId("#{id:inputText1}"),"aria-required","true")]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:message id="message1" for="inputText1"></xp:message>
如您所见,我还尝试在按钮中添加带有 csjs 的 aria-required 属性,希望它能启动验证。
如果验证按预期工作,是否有任何建议让这样的动态验证正常运行?我知道我可以在数据源上使用 querySave 做一些事情(为简单起见,我从示例中排除了数据源),但希望有比这更简单的解决方案。