【问题标题】:JSF Error Message and Info Message is not working from backing beanJSF 错误消息和信息消息在支持 bean 中不起作用
【发布时间】:2017-07-03 18:32:02
【问题描述】:

在将消息设置为来自支持 bean 的面上下文时,我需要一些帮助, 我的页面设计布局如下。所有页面都使用通用布局。

ContactUs.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{language.layout}"> //CommonLayout.xhtml //common template
<ui:define name="content">

<div class="input-cont">
<h:form styleClass="login-form">
<h:messages errorClass="error medium" layout="table" />
<p:inputText value="#{customerBean.contactUsDTO.email}"
        id="useremail" name="useremail" type="email"
            styleClass="input-text" placeholder="Email" />

<p:inputTextarea value="#{customerBean.contactUsDTO.comments}"
name="txtFeedback" id="txtFeedback"
styleClass="input-text comment-area" placeholder="Comments"</p:inputTextarea>

<div class="btn-cont labels-to-inputs">
<h:commandLink action="#{customerBean.contactUs}"
styleClass="next-btn login-btn ord-btn">Submit</h:commandLink>
</div>
</h:form>

CommonLayout.xhtml如下

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:p="http://primefaces.org/ui"
    >


<f:view locale="#{language.locale}">  
<h:head>

 <h:body>
     <div class="container">
<ui:insert name="leftNav"> <!-- Left Navigation -->
                        <ui:include src="commonLeft.xhtml" />
                    </ui:insert>

                 <div id="content"> <!-- External Page Contents Starts -->
                    <ui:insert name="content">

                    </ui:insert>
                </div>  <!-- External Page Contents Ends -->
</div>
</h:body>
 </f:view>
</html>

还有ContactBean.java 这个 bean 的会话范围在 facesconfig.xml 文件下

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class ContactBean{

public String contactUs() {
    String response="success" //Testing purpose
    if(!response.equalsIgnoreCase("success")){
                    {raiseError("Service is temporarily unavailable, Try again later");


                    }
                    System.out.println("Response from email is  "+response);
                }
                else if(response.equalsIgnoreCase("success")){
                    System.out.println("Response from email is  "+response);
                    {raiseInfo("Thanks for gettting in touch with Us, We will contact you soon");

                    }

                }
}
    return "ContactUs";

}

public void raiseError(String msgText){
    FacesContext fc = FacesContext.getCurrentInstance();
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
    fc.addMessage(null, msg);
}//raiseError

public void raiseInfo(String infoMsg){
    FacesContext fc = FacesContext.getCurrentInstance();
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, infoMsg, infoMsg);
    fc.addMessage(null, msg);

}//raiseError

}

此 raiseInfo 和 rasieError 消息未向该联系表单页面显示任何消息,在将这些消息作为新消息对象添加到 faces 上下文之后,它也没有显示。可能发生的错误是什么。

【问题讨论】:

  • @Abhishekyou 没有从 contactUs() 方法正确地将字符串参数发送到方法 raiseError。看我的回答
  • 嗨,ArgaPK 有另一个带有单个参数的被覆盖的方法,我使用的是 raiseInfo 方法,虽然你的解决方案在这种情况下也没有帮助
  • 我发现了一些有用的东西。

标签: java ajax jsf primefaces xhtml


【解决方案1】:

正如@ArgaPK 正确指出的那样,您错过了在contactUs 方法内的raiseError 调用中终止第一个字符串参数并启动第二个字符串参数,而不是2 个参数,它是一个字符串,因此出现错误: raiseError("服务暂时不可用,稍后再试");

应该是编译时错误。

【讨论】:

  • 实际上有两个字符串(参数)正在传递给 raiseError 方法; raiseError(String msgText,String id);
  • @ArgaPK:不,ypu 在这方面是错误的,LNP 是完全正确的,但我认为 OP 没有发布所有代码。否则将是一个编译错误。而且您实际上声明了相同的内容...只是您的解决方案更糟,您假设 , 是分隔符,现在传递了一个非常奇怪的 id ..,“稍后再试”?奇怪
  • @Kukeltje 我没有说没有错误。看到 id 可以是任何字符串,但它应该是一个字符串。这里的 id 是这个字符串“稍后再试”,看起来很奇怪。
  • 不,您在答案中创建了 ot 作为第二个字符串,正如另一个 mpre 正确答案所述,它在 op 中丢失。应该有一个真实的 id 或者一个带有 in 参数 shoy;d 的方法存在。上面发布的代码无法运行否则
  • @Lnp JSFmessage 组件存在一些渲染问题,我无法找到。如果从 xhtml 页面本身出现任何错误消息,例如空白输入元素,那么它会正确显示错误,但是当从支持 bean 添加消息时,它不会在页面中显示消息。
【解决方案2】:

寻找解决方案: 你必须在你的 xhtml 表单中添加&lt;p:growl&gt; 标签。

<h:form styleClass="login-form">

<p:growl id="growl" life="2000" />

.... 
<h:commandLink action="#{customerBean.contactUs}"
styleClass="next-btn login-btn ord-btn">Submit</h:commandLink>

</h:form>

【讨论】:

  • h:messages 也应该有效吗?如果 p:growl 有效。
  • 你试过 p:growls 了吗?
  • 好吧,我从未尝试过使用 h:message,但成功使用了 p:growl。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2020-07-27
  • 2014-02-05
相关资源
最近更新 更多