我知道是什么prependId="false"呢.它设置了标志,以便表单的id不会添加表单子的id,但为什么呢?你为什么或者不想加前缀ID的任何特殊原因?
Rom*_*las 40
根据我的经验,我从不使用这个属性.但是,在某些情况下它可能很有用.
使用Facelets时,您可以创建模板或在其他页面中包含页面.所以你可以想象一个页面可以包含在几个不同的页面中.以父页面包含form不同ID 的示例为例:
第1页:
<h:form id="form1">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
Run Code Online (Sandbox Code Playgroud)
第2页:
<h:form id="form2">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
Run Code Online (Sandbox Code Playgroud)
现在,在my-page.xhtml,你有一个<h:inputText id="foo"/>.在第一种情况下,输入的实际ID将是form1:foo,而在第二种情况下,它将是form2:foo.如果您需要在Javascript或Java(使用findComponent("...")方法)中直接访问此组件,则可能会出现复杂情况.
如果您使用prependId="false"(或在某些组件上forceId="true"),真正的ID将是简单的foo,然后您的代码将更简单,因为您不必关心输入字段的容器.
但是,您必须仔细使用此属性,因为如果您prepend经常使用此属性,则可能会出现重复的ID错误...
如果使用Spring Security,则prependId = false有用的情况是登录表单,因为inputtexts的id必须是"j_username"和"j_password".所以你不应该在它们之前放置表单id,并且使用prependId = false是一个很好的选择来实现它.
我更喜欢偶尔添加prependId来更容易地通过他们的ID类创建样式元素.例如,表格:
<h:form id="myform" ... >
<h:inputText id="mytext" ... />
</h:form>
Run Code Online (Sandbox Code Playgroud)
会给你一个ID myform:mytext.由于冒号是在CSS中保留的,你必须转义CSS才能读取#myform\:mytext { ... }我不想做的事情.随着prependId="false"我开始使用#mytext { ... }哪个更简单,更好阅读.它还可以使用像LESS或Sass这样的CSS预处理器.
| 归档时间: |
|
| 查看次数: |
42299 次 |
| 最近记录: |