![](/img/trans.png)
[英]JSF 2.0 checking by EL if components are valid inside composite component
[英]Acquire full prefix for a component clientId inside naming containers with JSF 2.0
我在JSF中通過AJAX更新組件:
<h:form>
<h:outputLink>Click me
<f:ajax event="click" render=":messages" />
</h:outputLink>
</h:form>
<h:messages id="messages" globalOnly="true" />
作為<h:messages />
駐留外面<h:form />
我有冒號的前綴ID( : :
這有效。
但是,如果我將相同的代碼放入組件並將該組件包含到我的頁面中,則代碼將失敗。 原因是:messages
聲明是指組件層次結構的根,而我想要更新的<h:messages />
組件實際上位於我的自定義組件下,該組件位於頁面下(因此位置是樣式的:myComponent:messages
。
在我的組件內部,如何為<h:messages />
組件實現正確的前綴? 我知道我可以手動為我的組件分配ID,並使用它來為引用添加前綴(例如:#{cc.attrs.id}:messages
)。 但是,我不知道這個組件位於哪個級別的組件層次結構中,因此所需的前綴可能類似於:foo:bar:x:y:messages
。
好像你可以通過表達式語言(EL)隱式對象( cc
和component
)訪問當前前綴:
cc.clientId
返回當前復合組件的前綴 component.clientId
返回任何當前組件的前綴。 例如,在頁面中,通過調用某個組件
<myComponent id="foo">
在這個組件中,可以像這樣獲取客戶端ID:
<h:outputText id="bar">
<p>ClientId for the composite component: #{cc.clientId}</p>
<p>ClientId for current any component: #{component.clientId}</p>
</h:outputText>
以下內容應打印為:
ClientId for the composite component: foo
ClientId for current any component: foo:bar
我從博客文章JSF獲得了指針:使用組件標識符(id / clientId) 。 它聲明這是JSF 2.0的新功能。 在此之前,必須以編程方式從輔助bean中獲取ID。
@Tuukka Mustonen,謝謝你的回答。
如果我們需要從同一個“地方”訪問另一個ID,我們可以使用:
<h:outputScript name="js/my-script.js"/>
<h:form id="myForm">
<h:inputText id="aaa"
onkeyup="myJSFunction(this.id)"
value="..."
/>
<h:inputText id="bbb"
onkeyup="myJSFunction(aaa.id)"
value="..."
/>
<h:inputText id="ccc"
onkeyup="myJSFunction('#component.parent.clientId.concat(':ccc')}')"
value="..."
/>
<h:inputText id="ddd"
onkeyup="myJSFunction('#component.parent.clientId.concat(':aaa')}')"
value="..."
/>
</h:form>
JavaScript函數:
function myJSFunction(message) {
window.alert(message)
}
對話框窗口輸出:
1)myForm:aaa
2) null
3)myForm:ccc
4)myForm:aaa
注意:所以第1和第3個輸出相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.