在jboss seam中,js对象不能通过document.getElementById("对象id") 获得,页面中每个页面元素都有默认的id,只能通过 “一层id:二层id”这种形式得到当前元素的id,
比如: <s:form id="myform">......
<s:link id="link">..............
要想获得link,只能用 document.getElementById("myform:link")这种形式,而不能用document.getElementById("link"),这种方法看起来有点笨拙,大家有没有更好的办法,谢谢
呵呵,这个问题的原因是,jsf的 <s:form>标签造成的,在标签输出的HTML中, <s:form>表单下的控件会自动加上 formid: 可以等页面打开后查看源码就能看到。
jsf的 <s:form>标签有一个可选参数,具体什么我也忘了,你可以查一下,设好这个参数之后,form下的其他控件在生成HTML时就不会再加上formid: 了。
注:这个属性是 prependid
[form ID]:[clientID]
页面开发人员可以对指定ID的form组件或者包含在该form中的其他组件进行操作。如果页面开发人员没有指定form的ID号或者组件的ID号,那么系统会自动生成。
早期版本的JSF规 范没有规定这个算法,只要开发人员理解其工作原理就够了。此外,对于自定义的组件或者一个渲染类来说,页面开发人员没办法确定是否已经设置了组件的客户端 ID号或者是否系统为它们自动生成。最后,因为某种原因,渲染器的开发人员可能无法改变它的名称,但是仍然要在JavaScript中引用它。
最后的JSF规范明确的说明了生成客户端组件ID的算法。我们可以在UIComponent的API文档中找到相关信息。由于UIForm组件增加了prependId属性,相应的算法也做了变化。页面开发人员现在可以改变该属性的默认值(默认值为false,可以改为true),这样就表明可以不需要使用Form的ID作为组件ID的前缀了。下表格显示了正常情况下生成客户端组件ID的不同点:
Table 1:客户端组件ID生成情况
场景
prependId=rue
prependID=alse
开发人员没有设置ID
_id0:_id1
_id1
开发人员仅仅设置了form的ID
myForm:_id0
_id0
开发人员只设置组件ID
_id0:myComponent
myComponent
开发人员对form和组件都设置了ID
myForm:myComponent
myComponent
新标签setPropertyActionListener
除了actionListener标签之外,允许我们给自定义的组件注册一个Action Listener,核心的标记库现在已经包括在setPropertyActionListener标记中。用这个标记注册一个特定的action listener到ActionSource实例中,并与具体的组件关联起来。当组件被激活,listener就会把对象的引用存储到标记的属性中。