我知道prependId="false"
的作用。它设置了标志,以便表单的id不会添加表单子的id,但为什么呢?你为什么或者不想在id前加上任何特殊原因?
答案 0 :(得分:40)
根据我的经验,我从不使用此属性。但是,在某些情况下它可能很有用。
使用Facelets时,您可以创建模板或在其他页面中包含页面。所以你可以想象一个页面可以包含在几个不同的页面中。以父页面包含form
的示例为例,其中包含不同的ID:
Page 1 :
<h:form id="form1">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
Page 2 :
<h:form id="form2">
<ui:include src="pages/my-page.xhtml"/>
...
</h:form>
现在,在my-page.xhtml
中,您有一个<h:inputText id="foo"/>
。在第一种情况下,输入的实际ID为form1:foo
,而在第二种情况下,它将为form2:foo
。如果您需要使用Javascript或Java(使用findComponent("...")
方法)直接访问此组件,则可能会出现复杂情况。
如果您使用prependId="false"
(或某些组件forceId="true"
),真实ID将只是foo
,那么您的代码将更简单,因为您不必关心输入字段的容器。
但是,您必须仔细使用此属性,因为如果您经常使用此prepend
属性,则可能会出现重复的ID错误...
在现代jsf版本中,它也可能会破坏ajax,请参阅UIForm with prependId="false" breaks <f:ajax render>
答案 1 :(得分:8)
prependId = false有用的情况是在登录表单中,如果您使用的是Spring Security,因为inputtexts的id必须是“j_username”和“j_password”。所以你不应该把表单id放在它们之前,使用prependId = false是一个很好的选择来实现它。
答案 2 :(得分:7)
我更喜欢偶尔添加prependId,以便通过ID类更轻松地创建样式元素。例如,表格:
<h:form id="myform" ... >
<h:inputText id="mytext" ... />
</h:form>
会为您提供myform:mytext
的ID。由于冒号是在CSS中保留的,你必须转义CSS才能阅读#myform\:mytext { ... }
之类的内容,我不想这样做。使用prependId="false"
,我只使用#mytext { ... }
,这更加简单&amp;更好阅读。它还可以使用像LESS或Sass这样的CSS预处理器。
答案 3 :(得分:2)
我们必须设置此标志的一个场景是在自动完成控制primefaces库的情况下。
当我尝试自动完成对primefaces库的控制时,我不得不将此标志设置为false。我无法使自动完成工作,但设置此标志后它工作正常。你可以看到这个关于这个问题的问题的链接
WARN [Parameters] Parameters: Invalid chunk ignored. warning coming in primefaces application
答案 4 :(得分:2)
除了使CSS选择器更容易之外,使用prependId=false
还可以更轻松地使用JavaScript和jQuery来访问特定元素。
否则,在不使用RichFaces的情况下,使用jQuery通过id获取elmement,你将不得不使用一个丑陋的转义序列,如:
jQuery("form-id\\:element-id")