2013-12-17 48 views
0

我有一個inputtext啓用<a4j:commandbutton>id=subjectButton旁邊。當我填寫inputtext並點擊按鈕時,disabled inputtext顯示在第一個上面,顯示添加的內容。對於enabled inputtext上的每個內容,都會在其上方顯示一個新的禁用內容。<a4j:commandbutton>沒有顯示其動作方法創建的<h:message>

當我點擊subjectButton時,如果它被填充,上面的情況就會發生,但如果它是空的,我會在它旁邊出現一個<h:message>,表示無法插入空主題。只有當我點擊按鈕時,該消息纔會出現。在下面的代碼,我試圖做到這一點,你看:

<a4j:outputPanel id="subjectPanel"> 
    <br /> 
    <h:outputText value="Subjects:"/> 
    <br /> 
    <a4j:repeat value="#{insertDocController.moreSubjects}" var="bean">  
    <h:inputText id="inputSubject" value="#{bean.subject}" disabled="true"/> 
     <a4j:commandButton type="submit" action="#{insertDocController.removeSubject(bean.subject)}" 
     value="Remove" render="subjectPanel" execute="@this" /> 

    </a4j:repeat> 
    <br /> 
    <h:inputText id="inputSub" value="#{insertDocController.currentSubject}"/> 


    <a4j:commandButton id="subjectButton" value="Insert" 
        action="#{insertDocController.addSubject}" 
        render="subjectPanel inpuSubject subjectMessage" 
        execute="@this inputSub"> 
    </a4j:commandButton> 
     <h:message for="inputSub" id="subjectMessage" style="color:red" /> 
    <br /> 
    </a4j:outputPanel> 

這就是方法addSubject()呼籲從subjectButton action屬性。該消息被設置在這裏:

public void addSubject() {  
     if((this.currentSubject == null) || (this.currentSubject.equals(""))) { 

      FacesContext ctx = FacesContext.getCurrentInstance(); 
      FacesMessage msg = new FacesMessage("Empty input!"); 
      ctx.addMessage("subjectMessage",msg); 
      System.out.println("MSG : " + msg.getSummary().toString()); 
     } else { 
      SubjectBean subBean = new SubjectBean(); 
      subBean.setSubject(this.currentSubject); 
      this.docController.getDocumentBean().getSubjectList().add(subBean); 
      this.currentSubject = ""; 
     } 
    } 

當我點擊按鈕,inputText的是空的,addSubject()被調用,消息設置,因爲我做了測試裏面addSubject() - (它在上面的代碼所示太) :

System.out.println("MSG : " + msg.getSummary().toString()); 

並且消息被打印在控制檯上。

有什麼問題?

謝謝!

+0

什麼讓你使用的''=需要TRUE''? – mabi

回答

1

FacesContext.addMessage需要組件的clientId,而不是消息ID。

試試這個:

ctx.addMessage("inputSub",msg);//inputSub as clientId 
//clientId depends on the final generated id of the inputField 
//it might be subjectPanel:inputSub or formId:inputSub 
+0

它仍然沒有出現。 – Luciane

+0

您必須使用chrome或firefox檢查元素,並查看輸入字段的最終生成ID。它可能是'subjectPanel:inputSub'所以'ctx.addMessage(「subjectPanel:inputSub」,味精);' –

+0

將檢查.......... – Luciane

1

你能確保你傳遞正確的客戶端ID到ctx.addMessage()?要驗證,請打開Firebug的HTML面板(或您的瀏覽器的等效項),找到<h:inputText id="inputSub">並注意由JSF設置的id爲的真實;嘗試通過 id到ctx.addMessage()

如果這樣不起作用,請檢查Firebug的網絡面板以及當您按下按鈕時服務器發送的響應。 <h:message>是否正確顯示?

與此無關,您正在重新渲染整個<a4j:outputPanel>,因此在<a4j:commandButton render="subjectPanel inpuSubject subjectMessage">中,其他ID可能是多餘的。

+0

謝謝你的提示!該id是form:inputSub。它正在工作! – Luciane

相關問題