Streaming content to JSF UI
Posted
by Mark Lewis
on Stack Overflow
See other posts from Stack Overflow
or by Mark Lewis
Published on 2010-03-15T12:32:01Z
Indexed on
2010/03/15
14:29 UTC
Read the original article
Hit count: 258
Hello,
I was quite happy with my JSF app which read the contents of MQ messages received and supplied them to the UI like this:
<rich:panel>
<snip>
<rich:panelMenuItem label="mylabel" action="#{MyBacking.updateCurrent}">
<f:param name="current" value="mylog.log" />
</rich:panelMenuItem>
</snip>
</rich:panel>
<rich:panel>
<a4j:outputPanel ajaxRendered="true">
<rich:insert content="#{MyBacking.log}" highlight="groovy" />
</a4j:outputPanel>
</rich:panel>
and in MyBacking.java
private String logFile = null;
...
public String updateCurrent() {
FacesContext context=FacesContext.getCurrentInstance();
setCurrent((String)context.getExternalContext().getRequestParameterMap().get("current"));
setLog(getCurrent());
return null;
}
public void setLog(String log) {
sendMsg(log);
msgBody = receiveMsg(moreargs);
logFile = msgBody;
}
public String getLog() {
return logFile;
}
until the contents of one of the messages was too big and tomcat fell over. Obviously, I thought, I need to change the way it works so that I return some form of stream so that no one object grows so big that the container dies and the content returned by successive messages is streamed to the UI as it comes in.
Am I right in thinking that I can replace the work I'm doing now on a String
object with a BufferedOutputStream
object ie no change to the JSF code and something like this changing at the back end:
private BufferedOutputStream logFile = null;
public void setLog(String log) {
sendMsg(args);
logFile = (BufferedOutputStream) receiveMsg(moreargs);
}
public String getLog() {
return logFile;
}
© Stack Overflow or respective owner