簡體   English   中英

<a4j:commandbutton> 不顯示 <h:message> 在其動作方法上創建

[英]<a4j:commandbutton> doesn't show <h:message> created on its action method

我有一個inputtext啟用了<a4j:commandbutton> ,旁邊有id=subjectButton 當我填充該inputtext並單擊該按鈕時,在第一個上方顯示disabled inputtext ,顯示添加的內容。 對於已enabled inputtext上的每個內容,其上方會顯示一個新的禁用內容。

當我點擊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屬性的subjectButton 消息在此處設置:

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());

消息將打印在控制台上。

有什么問題?

謝謝!

你能確保將正確的客戶端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可能是多余的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM