Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示在getter而不是操作中发生的错误的错误消息_Java_Jsf - Fatal编程技术网

Java 显示在getter而不是操作中发生的错误的错误消息

Java 显示在getter而不是操作中发生的错误的错误消息,java,jsf,Java,Jsf,莫恩 我遇到过这样一种情况:我试图使用getter中引发的异常的p:message来显示错误消息。但这会导致消息“警告:有一些未处理的FacesMessages,这意味着不是每个FacesMessage都有机会被呈现。” 我执行以下操作将消息附加到FacesContext: FacesContext.getCurrentInstance().addMessage(cliendId, getFacesMessage(severity, msgKey, args)); 我认为无法呈现消息,因为在g

莫恩

我遇到过这样一种情况:我试图使用getter中引发的异常的
p:message
来显示错误消息。但这会导致消息“警告:有一些未处理的FacesMessages,这意味着不是每个FacesMessage都有机会被呈现。”

我执行以下操作将消息附加到FacesContext:

FacesContext.getCurrentInstance().addMessage(cliendId, getFacesMessage(severity, msgKey, args));
我认为无法呈现消息,因为在getter中创建消息发生在呈现消息太晚的阶段

有没有办法在getter中而不是在action中创建消息?
也许可以重置渲染阶段?

p:消息说您正在使用PrimeFaces。这可能是一个AJAX调用,p:message组件不会在该调用中更新。这是一个常见的错误


我需要从外部系统加载数据。我在bean getters中访问外部服务器。如果出现网络错误,我想显示一条错误消息

用getter方法做业务工作是错误的方法。在JSF托管bean中,getter除了返回数据或者至少对已经可用的属性进行一些预计算之外,不应该做任何其他事情。您不应该在getter方法内分配属性值,否则它必须用于延迟加载

在视图呈现期间调用getter。在您的特定情况下,getter在呈现
之后被适当地调用,因此它永远没有机会显示稍后添加的faces消息

将业务作业移动到支持bean的(post)构造函数或(action)侦听器方法

例如,在施工后方法中:

@PostConstruct
public void init() {
    try {
        data = loadFromWebservice();
    } catch (SomeException e) {
        log(e);
        addFacesMessage();
    }
}
当然,您也可以将
移动到页面的最底部(如有必要,还可以使用CSS重新定位),但这与其说是解决方案,不如说是一种变通方法

另见:

另外,您也可以使用
显示面部信息

类似

都能够显示特定的面部信息。 始终检查您的严重性设置

例如,如果您使用:

<p:growl id="growl" showDetail="true" severity="info,warn" sticky="false"/>
<p:growl id="errorGrowl" showDetail="true" severity="error" sticky="true" />

我也试过h:message,但也没用。。。当这是一个常见的错误时,是否也有一个通用的解决方案?Peter Gwiazda的意思是,您需要使用ajax调用(如果这是一个ajax调用)重新提交p:message。更改为h:message不会有帮助。我不认为这是一个ajax请求,因为它发生在我加载页面时。您是否将导致问题的clientId的属性“for”设置正确?尝试添加p:messages组件以尝试是否捕获消息。是的,我使用了“for”属性。p:消息也不显示消息。功能要求是什么?为什么不使用
验证程序
?我需要从外部系统加载数据。我在bean getters中访问外部服务器。我想在出现网络错误时显示错误消息。我认为验证器只能在bean(验证阶段)中设置值时使用,而不是从bean中读取值……显示消息通常与验证相关。但是现在功能需求更清楚了,您确实根本不需要验证。JSF上多次调用getter的链接与这个问题特别相关!谢谢你的建议。我必须按照你的建议重构它。但是我不能使用@PostConstruct,因为我有一个带有ConversationScope的Bean。我改用f:event type=“preRenderView”。
public void saveError( FacesMessage facesMessage )
{
    FacesContext.getCurrentInstance().addMessage( "errorGrowl", facesMessage );
    update( "errorGrowl" );
}