java - <a4j :commandbutton> doesn't show <h:message> created on its action method

标签 java ajax jsf message

我有一个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>

这是对 subjectButton 的 action 属性调用的方法 addSubject() 。消息设置在这里:

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 = "";
        }
    }   

当我单击按钮且输入文本为空时,addSubject()被调用并设置消息,因为我在 addSubject() 内进行了该测试- (上面的代码也显示了):

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

并且该消息打印在控制台上。

有什么问题吗?

谢谢!

最佳答案

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

关于java - <a4j :commandbutton> doesn't show <h:message> created on its action method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639109/

相关文章:

Javascript对象和这个

javascript - 防止在复选框值更改时调用 onchange 事件

java - 如何使约束布局的宽度为负数?

javascript - 从 Ajax 加载的内容加载内容

php - 通过 AJAX 将 Javascript $_GET 变量传递给 CodeIgniter 模型

validation - p :commandButton doesn't call action on validation error

jsf - 如何通过附加环境来更改上下文?

Java 正则表达式以一个反斜杠开头

Java Swing绘画和鼠标事件闪烁

java - 数组列表中的最小生成树