如果滿足某些條件,我使用ViewHandler來阻止任何訪問頁面上的所有輸入元素。如何在jsf嵌入複合組件後在ViewHandler中禁用元素?
這對於「主」xhtml文件中的輸入元素非常適用,但複合組件中的輸入元素未被阻止。我認爲這與JSF在我的ViewHandler完成工作後嵌入這些組件的事實有關。
有沒有人有我如何禁用複合材料中的元素的想法?
如果滿足某些條件,我使用ViewHandler來阻止任何訪問頁面上的所有輸入元素。如何在jsf嵌入複合組件後在ViewHandler中禁用元素?
這對於「主」xhtml文件中的輸入元素非常適用,但複合組件中的輸入元素未被阻止。我認爲這與JSF在我的ViewHandler完成工作後嵌入這些組件的事實有關。
有沒有人有我如何禁用複合材料中的元素的想法?
A ViewHandler
是該工作的錯誤工具。它有助於創建,構建和恢復視圖並生成用於JSF表單和鏈接的URL。它並不是用來操縱視圖中的組件。
根據您的特殊功能要求, PostAddToViewEvent
可能是最好的選擇。我只是做了一個快速測試,它也適用於複合材料的輸入。
public class MyPostAddtoViewEventListener implements SystemEventListener {
@Override
public boolean isListenerForSource(Object source) {
return (source instanceof UIInput);
}
@Override
public void processEvent(SystemEvent event) throws AbortProcessingException {
UIInput input = (UIInput) event.getSource();
if (true) { // Do your check here.
input.getAttributes().put("disabled", true);
}
}
}
爲了得到它的運行,裏面的faces-config.xml
<application>
如下注冊它:
<system-event-listener>
<system-event-listener-class>com.example.MyPostAddtoViewEventListener</system-event-listener-class>
<system-event-class>javax.faces.event.PostAddToViewEvent</system-event-class>
</system-event-listener>
我很驚訝在你成功使用視圖處理程序,這個第一的位置。我期望看到一個階段監聽器或組件監聽器用於此。換句話說,視圖處理程序可能只是這項工作的錯誤工具。 – BalusC 2013-02-22 16:51:55
我嘗試先使用phaselistener,但沒有奏效。完全一樣。你能向正確的方向暗示我嗎? – Cos 2013-02-22 17:02:13
階段偵聽器確實對GET請求很敏感。如果在渲染響應的前期階段(即在沒有viewparams的視圖中)尚未完成,則必須手動觸發視圖的構建。我發佈了一個使用組件監聽器的答案。 – BalusC 2013-02-22 19:01:21