我有一个使用自定义控件以读取模式显示的表单,该控件绑定到视图范围的bean。我需要在此CC上有一个选择器,以便用户可以选择其他文档。它们显示为链接(使用重复控制生成)。 我打算在我的视图范围bean中触发一个方法,以便在选择更改时保存此值。
现在我被困住了:
简而言之,SSJS代码没有被触发。
这让我很烦恼,因为我创建了一个文件下载控件,其中我添加了一个删除按钮,调用bean中的方法,它运行正常。
我正在使用Mark Leusink的Debugtoolbar,我无法显示简单消息或设置任何范围变量。这发生在onChange和onClick事件上! 我在下面提供了我的CC代码。如果您愿意,可以将它放在绑定到视图范围bean的任何Xpage中。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:panel id="panel1">
<xp:inputTextarea id="inputTextarea1" style="display:none" value="#{viewScope[compositeData.pickerDetails.beanName][compositeData.pickerDetails.saveToField]}"
multipleSeparator=","
>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="repeatLinks">
<xp:this.action><![CDATA[#{javascript://viewScope[compositeData.pickerDetails.beanName][compositeData.pickerDetails.saveToField]= getComponent("inputTextarea1").getValue();
//viewScope.get(compositeData.pickerDetails.beanName).setValue(compositeData.pickerDetails.saveToField,getComponent("inputTextarea1").getValue());
//viewScope[compositeData.pickerDetails.beanName].linkDocs(compositeData.pickerDetails.saveToField,getComponent("inputTextarea1").getValue());}]]></xp:this.action>
<xp:this.script><![CDATA[//console.log("Btn found : "+document.getElementById(getID("btnLinks")));
document.getElementById(getID("btnLinks")).click();]]></xp:this.script>
</xp:eventHandler>
</xp:inputTextarea>
<xe:valuePicker id="valuePicker1" listHeight="auto" listWidth="auto" dialogTitle="#{javascript:compositeData.pickerDetails.title}" for="inputTextarea1">
<xe:this.dataProvider>
<xe:simpleValuePicker labelSeparator="|">
<xe:this.valueList><![CDATA[#{javascript:var cd = compositeData.pickerDetails;
getPickerList(cd.viewName,cd.filter,cd.filterField);}]]></xe:this.valueList>
</xe:simpleValuePicker>
</xe:this.dataProvider>
</xe:valuePicker>
<xp:repeat id="repeatLinks" rows="30" var="docLink">
<xp:this.value><![CDATA[#{viewScope[compositeData.pickerDetails.beanName][compositeData.pickerDetails.saveToField]}]]></xp:this.value>
<xp:text escape="false" id="computedField1">
<!-- Link is generated here -->
</xp:text>
<xp:br></xp:br>
</xp:repeat>
<xp:button value="Click Me" id="btnLinks" refreshId="repeatLinks" refreshMode="partial">
<xp:this.onclick><![CDATA[#{javascript:viewScope[compositeData.pickerDetails.beanName].linkDocs(compositeData.pickerDetails.saveToField,getComponent("inputTextarea1").getValue());}]]></xp:this.onclick>
</xp:button>
</xp:panel>
</xp:view>
答案 0 :(得分:1)
你提到这是一个自定义控件。最可能的原因是页面上其他地方的验证失败。您的按钮在没有execMode="partial"
和execId
的情况下调用SSJS。这意味着在部分刷新期间验证完整的XPage。您的refreshId不包含错误块,因此如果存在验证错误,则无法提醒用户(以及您!)。
在按钮上设置execMode="partial"
和execId="panel1"
可以解决问题。
如果是这种情况,将来我会建议在您的应用程序中添加PhaseListener,以便您可以轻松输出正在触发的阶段和/或始终确保refreshArea包含错误控制。
答案 1 :(得分:1)
如果删除样式“display:none;”那么代码会触发吗?
可能会发生验证失败。如果您为这些事件选择“未经验证的流程数据”会发生什么?