如何在驗證失敗後對組件進行樣式設計?驗證失敗後造型輸入組件
我有以下文本框:
<p:inputText id="username" value="#{authController.username}" autocomplete="off" required="true" />
我想以後改變顏色:
<p:commandButton id="submit" value="Login" actionListener="#{authController.login}" update=":growl" />
被點擊。
我找到了這個site,並試圖實現在那裏已經顯示的方式。
這是我的課:
public class RequiredFieldValidationListener implements SystemEventListener {
public boolean isListenerForSource(Object source) {
return true;
}
public void processEvent(SystemEvent event) throws AbortProcessingException {
if (event.getSource() instanceof UIInput) {
UIInput source = (UIInput) event.getSource();
if (!source.isValid()) {
String originalStyleClass = (String) source.getAttributes().get("styleClass");
source.getAttributes().put("data-originaStyleClass", originalStyleClass);
source.getAttributes().put("styleClass", originalStyleClass + " ui-input-invalid");
} else {
String originalStyleClass = (String) source.getAttributes().get("data-originaStyleClass");
source.getAttributes().put("styleClass", originalStyleClass);
}
}
}
}
我註冊它faces-config.xml
爲:
<application>
---
<system-event-listener>
<system-event-listener-class>com.edfx.adb.web.event.RequiredFieldValidationListener</system-event-listener-class>
<system-event-class>javax.faces.event.PostValidateEvent</system-event-class>
<source-class>javax.faces.component.html.HtmlInputText</source-class>
</system-event-listener>
</application>
此外,我曾嘗試使用
@ListenersFor({ @ListenerFor(sourceClass = HtmlInputText.class, systemEventClass = PostValidateEvent.class) })
public class RequiredFieldValidationListener implements SystemEventListener {
}
我期待,當輸入字段是無效的,在我的情況下,空白,CSS類ui-input-invalid將被添加到類組件的屬性。但它不起作用。事實上,方法processEvent
根本沒有執行。
我做錯了什麼,我該如何做到這一點?
heh幾乎總是omnifaces似乎有什麼需要。非常好:) –
@Aksel:這正是OmniFaces背後的理念:) – BalusC
感謝BalusC,非常好的解決方案,它的工作原理。主要是它不工作,因爲我已經在我的web.xml中設置了'javax.faces.PARTIAL_STATE_SAVING false param-value> context-param>',它的工作原理。我想知道這個上下文參數與'o:highlight'之間的關係是什麼?有什麼辦法可以同時使用它們嗎? –