【发布时间】:2016-03-29 23:38:14
【问题描述】:
我想要一个合成器
<h:form id="f_imgA" >
<h:graphicImage id="imgA"
onclick="document.getElementById('#{k_imgA.clientId}').value=mods(event)"
value="images/img?r=#{Math.random()}">
<f:ajax event="click" listener="#{mBean.handleEvent}"
execute="@this k_imgA" render="@this"></f:ajax>
</h:graphicImage>
<h:inputHidden id="k_imgA" binding="#{k_imgA}" value="#{mBean.keyX}" />
</h:form>
当我写作时
<comps:cimg imgId="imgA" />
此代码的最初目的是将修饰符状态(Ctrl、Shift、Alt)发送到服务器。
我有
<composite:interface>
<composite:attribute name="imgId" />
</composite:interface>
<composite:implementation>
<h:form id="f_#{cc.attrs.imgId}">
<h:graphicImage id="#{cc.attrs.imgId}"
onclick="document.getElementById('#{k_${cc.attrs.imgId}.clientId}').value=mods(event)"
value="images/img?r=#{Math.random()}">
<f:ajax event="click" execute="@this k_#{cc.attrs.imgId}"
listener="#{mBean.handleEvent}" render="@this">
</f:ajax>
</h:graphicImage>
<h:inputHidden id="k_#{cc.attrs.imgId}"
binding="k_#{cc.attrs.imgId}" value="#{mBean.keyX}" />
</h:form>
</composite:implementation>
这在意料之中是行不通的。有问题的表达是
#{k_${cc.attrs.imgId}.clientId}
它旨在返回 hiddenInput 的 clientId id 为 k_imgA 。据我所知,EL 无法处理上述嵌套表达式,但值得一试。那么有没有简单直接的方法来获取k_imgA的clientId呢?如果可以避免的话,我不想使用更多的 javascript。
编辑: 不要对#{Math.random()} 感到困惑,因为我有一个名为“Math”的bean。
javascript函数mods由
给出<h:outputScript target="body">function mods(event) {return ((event.ctrlKey)?1:0)+((event.shiftKey)?2:0)+((event.altKey)?4:0)} </h:outputScript>
【问题讨论】:
标签: jsf-2 el composite-component