将java日志重定向到jsf组件(作为netbeans或eclipse实时)
我有一个java方法,它太长了,不能等待。我希望有定期反馈到jsf图形组件作为输入区 下面是我的想法:“将java控制台重定向到图形组件中,以便给管理员提供方法执行的常规清晰概念”。他真的需要它 但是我被封锁了 ********我的InputExtArea仅在方法结束时刷新将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
如何实时刷新它?(无论方法是否结束)要正确回答,问题需要分为两个问题: 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组件中实时显示控制台。检查