2012-03-08 74 views
6

有沒有什麼方法可以驗證jsf輸入文本是隻讀的,但其值會在觸發其他某些事件時更改?jsf(richfaces)只讀輸入文本驗證

+2

無論在jsf頁面支持bean中驗證它會更容易嗎? – Richie 2012-03-08 12:17:55

+0

如何觸發驗證併發出驗證消息? – 2012-03-09 23:15:06

+0

我已添加答案作爲回覆評論。歡呼聲 – Richie 2012-03-12 11:18:26

回答

2

我用解決方法解決了這個問題。我已經添加了具有required屬性true不會在界面上出現的inputHidden場,但將被驗證:

<h:inputHidden value="#{bean.value}" required="true" 
        requiredMessage="Data must be entered" /> 

bean.value的價值被其他事件改變,在一些重新描繪上inputHidden,驗證發生。

1

您很可能必須直接從您的事件手動調用驗證邏輯。這是來自IBM的JSF生命週期模型。

enter image description here

你會發現調用應用程序階段,事件通常被處理之前處理驗證階段發生。這種情況發生後很好,所以驗證不會自動發生。

2

回答評論:「在jsf頁面支持bean中驗證它會更容易嗎?」 您可以對按鈕單擊或某些類似事件進行應用程序級驗證。你可以在你的支持bean中做這樣的事情,並將它鏈接到事件。

public String login(){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     if(**<<some validation for value in field 'firstName' in form 'userForm'>>**){ 
      FacesMessage message = new FacesMessage(); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      message.setSummary("Some Valication check"); 
      message.setSummary("Some Valication check!!"); 
      context.addMessage("userForm:firstName", message);//adds validation message for field firstName in form userForm 
      return "ERROR"; 
     } 
     return "SUCCESS"; 
    } 

希望這對我有所幫助。

+0

JSF不會更新'readonly =「true」'輸入的模型值。另外,在一個操作方法內而不是在一個正常的驗證器內部進行閾值操作是一種不好的做法。 – BalusC 2012-03-12 12:45:15

+0

@BalusC謝謝你的信息:)我不知道設置readonly =「true」作爲輸入不會更新模型值。至於在一個動作中進行驗證,我知道這不是最好的做法,但我認爲我們可能無法添加正常驗證器來進行只讀輸入。 – Richie 2012-03-12 16:24:15

12

僅在渲染響應階段將readonly屬性設置爲true。通過這種方式,在渲染響應階段以外的其他階段不會被視爲只讀。

<h:inputText ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}" /> 
+2

在我的例子中,當繪製HTML(當它打印在中間)時,#{facesContext.renderResponse}返回false。無論如何,它的工作方式是'#{facesContext.currentPhaseId.ordinal eq 6}'。 Mojarra 2.1.9。 – SJuan76 2012-09-20 11:28:42