Java 更新<;h:输入区域>;字符串更改时的内容

Java 更新<;h:输入区域>;字符串更改时的内容,java,ajax,jsf,richfaces,Java,Ajax,Jsf,Richfaces,好吧,这是一个很小的问题,但问题来了。我想在我的视图中使用(使用richfaces)显示在数据库上进行的各种插入/更新的进度。Bean是一个支持Bean,具有status属性和向其添加状态消息的方法: public void addMessage(String message) { status = status.concat(message + "\n"); } 有一个“迁移”按钮启动该过程。我的问题是,文本区域仅在migrator方法结束时更新。我需要的是每次更新状态,输入文本区域

好吧,这是一个很小的问题,但问题来了。我想在我的视图中使用
(使用richfaces)显示在数据库上进行的各种插入/更新的进度。
Bean
是一个支持Bean,具有
status
属性和向其添加状态消息的方法:

public void addMessage(String message) {
    status = status.concat(message + "\n");
}
有一个“迁移”按钮启动该过程。我的问题是,文本区域仅在migrator方法结束时更新。我需要的是每次更新
状态
,输入文本区域也会更新。所以

1-怎么做

2-有没有更好的方法来实现这一点


根据RichFaces组件引用,需要:

  • 设置推送

  • 使用服务器端或客户端方法

  • 实现一个消息生成器

  • 处理推送消息

所以我做了:

  • 安装运行时依赖项(大气): --添加了大气运行时-1.0.0.beta4与Maven的依赖关系

  • 注册推送Servlet --Servlet 3.0不需要,但在web.xml中添加了手动配置:

    推送Servlet org.richfaces.webapp.PushServlet 1. 真的

  • 选择服务器端方法和推送CDI事件机制来触发消息。已将my Status.java更新为消息生成器:

    导入java.io.Serializable; 导入javax.enterprise.context.SessionScoped; 导入javax.enterprise.event.event; 导入javax.inject.inject; 导入javax.inject.Named; 导入org.richfaces.cdi.push.push

    @命名 @会议范围 公共类状态实现可序列化{

    @Inject
    @Push(topic = "statusPush")
    Event<String> pushEvent;
    private String status;
    
    public void addMessage(String message) {
        //Everytime the status is updated...
        status = status.concat(message + "\n");
        //... the message is sent to the topic
        sendMessage(message);
    }
    
    public void sendMessage(String message) {
        pushEvent.fire(message);
    }
    
    
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    
    现在stacktrace是:

    警告:StandardWrapperValve[AutoRegisteredPushServlet]:PWC1406: Servlet AutoRegisteredPushServlet的Servlet.service() 异常java.lang.RuntimeException:java.lang.NullPointerException 在 org.atmosphere.handler.ReflectorServletProcessor.onRequest(ReflectorServletProcessor.java:171) 在 org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:248) 在 org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:166) 在 org.atmosphere.container.GrizzlyCometSupport.service(GrizzlyCometSupport.java:119) 在 org.atmosphere.container.GlassFishWebSocketSupport.service(GlassFishWebSocketSupport.java:110) 在 org.atmosphere.cpr.AtmosphereFramework.docomesupport(AtmosphereFramework.java:1257) 在 org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:293) 在 org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:279) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:668) http.HttpServlet.service(HttpServlet.java:770)位于 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 在 org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 在 com.sun.grizzly.comet.CometEngine.executeServlet(CometEngine.java:459) 位于com.sun.grizzly.comet.CometEngine.handle(CometEngine.java:316) com.sun.grizzly.comet.CometAsyncFilter.doFilter(CometAsyncFilter.java:87) 在 com.sun.grizzly.arp.DefaultAsyncExecutor.invokeFilters(DefaultAsyncExecutor.java:171) 在 com.sun.grizzly.arp.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:143) 在 com.sun.grizzly.arp.AsyncProcessorTask.doTask(AsyncProcessorTask.java:102) 位于com.sun.grizzly.http.TaskBase.run(TaskBase.java:193) com.sun.grizzly.http.TaskBase.execute(TaskBase.java:175)位于 com.sun.grizzly.arp.DefaultAsyncHandler.handle(DefaultAsyncHandler.java:145) 在 com.sun.grizzly.arp.AsyncProtocolFilter.execute(AsyncProtocolFilter.java:210) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在com.sun.grizzly.ContextTask.run(ContextTask.java:71)上 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在java.lang.Thread.run(Thread.java:722)处,由以下原因引起: 位于的java.lang.NullPointerException org.richfaces.webapp.PushHandlerFilter.doFilter(PushHandlerFilter.java:90) 在 org.atmospher.util.AtmosphereFilterChain.doFilter(AtmosphereFilterChain.java:154) 在 org.atmospher.util.AtmosphereFilterChain.invokeFilterChain(AtmosphereFilterChain.java:131) 在 org.atmosphere.handler.ReflectorServletProcessor$FilterChainServletWrapper.service(ReflectorServletProcessor.java:310) 在 org.atmosphere.handler.ReflectorServletProcessor.onRequest(ReflectorServletProcessor.java:168) …40多

    你必须体育
    <a4j:push address="statusPush"
        onerror="alert(event.rf.data)">
        <a4j:ajax event="dataavailable" render="statusOutput" />
    </a4j:push>
    
    
    <h:inputTextarea id="statusOutput" value="#{status.status}" cols="80" rows="20" disabled="true"/>
    
    <context-param>
        <param-name>org.richfaces.push.jms.enable</param-name>
        <param-value>true</param-value>
    </context-param>