Xpages-单击按钮调用bean方法
我使用绑定到视图范围bean的自定义控件在读取模式下显示了一个表单。我需要在这个CC上有一个选择器,以便用户可以选择其他文档。这些显示为链接(使用重复控件生成)。 我计划在视图范围bean中触发一个方法,以便在选择更改时保存该值 现在我被困在:Xpages-单击按钮调用bean方法,xpages,xpages-ssjs,xpages-extlib,Xpages,Xpages Ssjs,Xpages Extlib,我使用绑定到视图范围bean的自定义控件在读取模式下显示了一个表单。我需要在这个CC上有一个选择器,以便用户可以选择其他文档。这些显示为链接(使用重复控件生成)。 我计划在视图范围bean中触发一个方法,以便在选择更改时保存该值 现在我被困在: 多值字段(与选择器一起使用)的onChange事件不会触发SSJS代码 我尝试创建一个按钮,在上面的字段更改时使用CSJS单击该按钮-这也不起作用 简而言之,SSJS代码没有被触发 这让我很不安,因为我创建了一个文件下载控件,其中添加了一个在bean中调
<?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>
您提到这是一个自定义控件。最可能的原因是页面上其他地方的验证失败。您的按钮调用SSJS时不带
exemode=“partial”
和execId
。这意味着在部分刷新期间验证完整的XPage。您的refreshId不包含错误块,因此,如果存在验证错误,则无需向用户(和您!)发出任何警告
在按钮上设置execMode=“partial”
和execId=“panel1”
应该可以解决问题
如果是这样的话,我建议将来在应用程序中添加一个PhaseListener,以便您可以轻松地输出要触发的阶段和/或始终确保刷新区域包含错误控件。如果删除样式“display:none”,代码是否会触发
可能正在发生验证失败。如果为这些事件选择“未经验证的处理数据”,会发生什么情况?谢谢Paul,当我在“事件”选项卡中编写代码时,它不会被触发。正如您在上面的onClick中看到的,我已经在所有属性的事件下添加了内容。不确定这是我的设计师还是什么。然而,如果我像上面那样放置它,它会触发早期阶段,我不能再次触发它。如果在所有属性中单击编辑器,您会发现它显示客户端Javascript编辑器。因此,您输入的ssj是在初始呈现响应阶段计算的,将用于计算将作为客户端JavaScript运行的输出。将其移回“事件”选项卡,确保已将其置于“服务器”选项卡上,然后尝试查找验证错误。已尝试过。有没有办法确定是否触发了SSJS代码?我尝试设置范围变量/调试消息,但没有效果。我在onChange事件的onComplete上添加了CSJS,它会触发。但不是我的SSJS代码。我添加了错误控件,没有错误。我使用view.postScript方法在上面的代码中为panel1的OnClient Load事件添加了一条警报消息。它也不起作用。DebugToolbar中的信息消息也是如此!!PhaseListener是识别是否触发部分刷新以及处理哪些阶段的最佳方法。托尼·麦古金(Tony McGuckin)对此加了一句话。。。。代码2在faces配置中注册它,代码3是作为PhaseListener的Java类。嗨,John,显示字段只是显示从值选择器在字段中更新的值。它不会导致任何错误。