我正在重构一个模仿Notes客户端讨论数据库的XPage。 (不要问)
我创建了一个Managed Bean,它将所有导航信息加载到树中,并创建了一组嵌套的重复控件来访问托管bean。
我遇到崩溃和扩展功能的问题。原作者通过访问包含下一级条目的面板来使用客户端JavaScript。他们通过硬编码来做到这一点。 1000行XML,即。
<xp:this.script><![CDATA[collapse("#{id:repeatcontrolpanel3}]}")]]></xp:this.script>
我正在努力使这个通用;我在自定义控件中设置了一个属性 NameNestedRepeatControl ,其中包含我要折叠/展开的嵌套repeatcontrol的名称,我希望这可以工作:
<xp:this.script><![CDATA[collapse("#{id:#{compositeData.NameNestedRepeatControl}}")]]></xp:this.script>
但我得到了
javax.faces.el.MethodNotFoundException: NameNestedRepeatControl: com.ibm.xsp.binding.PropertyMap.NameNestedRepeatControl()
错误。
是否有一种特殊的语法,即从自定义控件的属性中获取字符串值,然后使用#{id:}来评估该字符串,或者是否有一个我更缺失的更优雅的方法? / p>
感谢您的帮助。
答案 0 :(得分:0)
我终于在外面构建了必要的脚本来解决这个问题。这里我有一个导航条目自定义控件,它有两个字符串属性script_expand和script_collapse。
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core">
<xp:panel
id="outerpanel"
styleClass="NavLeftRow"
style="#{compositeData.node.styleShowOnFirstLoad}">
<xp:panel
id="innerpanel">
<xp:this.styleClass><![CDATA[#{compositeData.node.inBreadCrumbPath ? compositeData.panelStyleWhenActive : compositeData.panelStyleWhenInactive}]]></xp:this.styleClass>
<xp:image
id="imgCollapsed"
url="/xpSectionCollapsed_oneUI.gif">
<xp:this.style><![CDATA[#{compositeData.node.styleHideIfInBreadCrumb}]]></xp:this.style>
<xp:this.rendered><![CDATA[#{compositeData.node.hasChildren}]]></xp:this.rendered>
<xp:eventHandler
event="onclick"
submit="false">
<xp:this.script><![CDATA[#{javascript:compositeData.script_expand}]]></xp:this.script>
</xp:eventHandler>
</xp:image>
</xp:panel>
</xp:panel>
脚本函数从外部调用;我正在通过手动操作来缓解计算相关ID的问题。
<xp:repeat
id="repeatfourthlevelnodes"
rows="200"
var="fourthlevelnode"
value="#{thirdlevelnode.children}">
<xc:ccPanelNavigation
node="#{fourthlevelnode}">
<xc:this.script_expand>
<![CDATA[expand("#{id:repeatfifthlevelnodes}");]]>
</xc:this.script_expand>
</xc:ccPanelNavigation>
</xp:repeat>
不像我希望的那么优雅,但比无法解释的代码好很多。
这是斯文的回答Pass javascript code to Custom Control这真的有帮助,所以这真的应该归他所有!