在我的代码中,我有以下事件处理程序
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" disableValidators="true"
refreshId="#{javascript:compositeData.refreshid}">
<xp:this.script><![CDATA[
alert('clicked');
]]></xp:this.script>
<xp:this.action><![CDATA[#{javascript:print("jkafkjsfjk");}]]></xp:this.action>
</xp:eventHandler>
不幸的是,我从未在控制台中打印过jkafkjsfjk
,而CSJS代码运行良好,并且弹出了点击警报。
我知道不执行它的最常见原因是一些必需的字段等于null或为空。
然而,我已经注释掉了所有内容,但代码无论如何都没有执行。。
我该如何解决,原因是什么?
提前谢谢。
有几件事。。。
首先,如果你的CSJS返回false,那么SSJS就永远不会运行(当你想让用户确认时,这很方便…(。我想你在这里应该没事,但为了安全,你可以返回true。。。。
其次,部分刷新、刷新id和部分执行可能会做一些与您预期不一样的事情。因此,对于测试,我只需要进行完全刷新并跳过id。
事件处理程序设置在什么类型的对象上?
我通常对链接或按钮使用此类事件处理程序,如:
<xp:button value="Add zone" id="button2" styleClass="btn-xs btn-primary">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="fields">
<xp:this.action><![CDATA[#{javascript:AssociationAdmin.createZone()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
这很好:-(
下面是一个先确认的例子:
<xp:link escape="true" text="Delete" id="link5" styleClass="action" rendered="#{javascript:!AssociationAdmin.isCatchInfoInUse(row.getKey())}">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler5">
<xp:this.action><![CDATA[#{javascript:AssociationAdmin.removeCatchInfo(row.key);}]]></xp:this.action>
<xp:this.script><![CDATA[return window.confirm("Are you sure you want to delete these fields: #{javascript:row.getName()}?nnDeletion cannot be undone!!")]]></xp:this.script>
</xp:eventHandler>
</xp:link>
进一步说明:
您可能希望在不进行验证的情况下提交。您可以通过将disableValidators="true"
添加到事件处理程序来完成此操作
请记住在控件上有一个id
,用于事件处理程序。只是浪费了一个晚上和早上的时间,因为按钮打开对话框没有出现最奇怪的行为,id
属性
希望这些样品能让你走下去:-(
/约翰·