Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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日志重定向到jsf组件(作为netbeans或eclipse实时)_Java_Eclipse_Logging_Jsf 2 - Fatal编程技术网

将java日志重定向到jsf组件(作为netbeans或eclipse实时)

将java日志重定向到jsf组件(作为netbeans或eclipse实时),java,eclipse,logging,jsf-2,Java,Eclipse,Logging,Jsf 2,我有一个java方法,它太长了,不能等待。我希望有定期反馈到jsf图形组件作为输入区 下面是我的想法:“将java控制台重定向到图形组件中,以便给管理员提供方法执行的常规清晰概念”。他真的需要它 但是我被封锁了 ********我的InputExtArea仅在方法结束时刷新 如何实时刷新它?(无论方法是否结束)要正确回答,问题需要分为两个问题: 1-重定向jsf组件中的java日志 2-实时显示此jsf组件 嗯。如果我们在这个问题的细分上达成一致,我们就可以统治 I-重定向jsf组件中的java

我有一个java方法,它太长了,不能等待。我希望有定期反馈到jsf图形组件作为输入区

下面是我的想法:“将java控制台重定向到图形组件中,以便给管理员提供方法执行的常规清晰概念”。他真的需要它

但是我被封锁了

********我的InputExtArea仅在方法结束时刷新


如何实时刷新它?(无论方法是否结束)

要正确回答,问题需要分为两个问题:

1-重定向jsf组件中的java日志

2-实时显示此jsf组件

嗯。如果我们在这个问题的细分上达成一致,我们就可以统治

I-重定向jsf组件中的java控制台日志

对于这个例子,我选择

要重定向组件中的java控制台日志,必须编写自己的OutputStream。例如:

package stream;

import java.io.OutputStream;
import java.io.Serializable;

import bean.managedBean.NBT;

public class StringOutputStream extends OutputStream implements Serializable {

    private static final long serialVersionUID = 1L;

    public StringOutputStream() {

    }

    @Override
    public void write(int b)  {
        NBT.appendConsole(String.valueOf((char)b));
    }

}
NBT是处理jsf页面的托管bean。

所以我们有这样的东西:

 @SessionScoped
    @ManagedBean(name = "Nbt")
    public class NBT implements Serializable{

    private static String log = ""; // The property linked to my <h:outputText /> 
//ex : <h:outputText id="logger" value="#{Nbt.log}" />

        public String getLog() {
            return log;
        }

        public void setLog(String log) {
            NBT.log = log;
        }

    public static String getConsole() {
            return log;
        }

        public static void appendConsole(String s) {
            log += s;
        }

    }
详细信息:PrintStream(yourOutputStream,true为“自动刷新”) 那么什么时候做:System.out.println(“AB C”)文本不会在自然控制台中打印,但会显示在
中。具体情况如下:

yourStringOutputString.write('A');
yourStringOutputString.write('B');
yourStringOutputString.write(' ');
yourStringOutputString.write('C');
因此,您将对所有写入方法执行许多
appendConsole
,这些写入方法将更新
log
值;对于要显示的文本的每个字符,将调用write方法。您将在jsf组件中得到结果

嗯。第一个问题解决了

II-实时刷新jsf组件

这很简单。有很多方法可以做到这一点。但对我来说,这是最简单的。源代码:

PrintStream pstream = new PrintStream(new StringOutputStream(), true);
System.setOut(pstream);
System.setErr(pstream);
<h:outputText id="log" value="#{Nbt.log}" styleClass="thattext" />
<p:poll id="pollid" interval="2"
    update="log" widgetVar="poll"
    async="true" immediate="true" />

您的组件将每2秒升级一次。”async属性将使其异步。忽略立即属性

这就是我的问题的答案:如何在jsf组件中实时重定向java日志?

它对我有用。我在我的
中看到了我的控制台


谢谢

您是否尝试过
线程
?你能告诉我你的代码中有问题的地方吗?我已经试过了。但是没有效果。我也试过线程。但事实是,我希望我的方法在执行结束之前呈现异步响应。线程修改变量,但不进行异步响应。请问,你的意见是什么?我想在jsf组件中实时显示控制台。检查