表未更新

问题描述 投票:-1回答:1

我正在尝试从bean更新JSF页面:

@PostConstruct
public void load() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            push.send("error");
            try {
                productionOrder = productionOrderController.findProductionOrderByOrderNumber(10268);
                System.out.println(productionOrder.getComposition());
            } catch (NoProductionOrderFoundException e) {
                e.printStackTrace();
            }
            try {
                PrimeFaces.current().ajax().update("#webSocketForm:table");
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }, 1000, 2000);
}

JSF页面是这个:

<ui:define name="content">
    <div class="ui-g">
        <div class="ui-g-12 card">

            <h:form id="webSocketForm">
                <script type="text/javascript">
            function messageListener(message) {


            }
        </script>
                <f:websocket channel="messagePusher" onmessage="messageListener" />

                <p:dataTable id="table" var="composition" reflow="true"
                    value="#{testView.productionOrder.composition}"
                    emptyMessage="Non è presente nessun elemento">
                    <p:column headerText="Articolo">
                        <h:outputText value="#{testView.productionOrder.article}" />
                    </p:column>
                    <p:column headerText="Variante">
                        <h:outputText value="#{composition.code}" />
                    </p:column>
                    <p:column headerText="Articolo colore">
                        <h:outputText value="#{composition.articleColor}" />
                    </p:column>
                    <p:column headerText="Fodera">
                        <h:outputText value="#{composition.lining}" />
                    </p:column>

                    <p:column headerText="Pelliccia">
                        <h:outputText value="#{composition.fur}" />
                    </p:column>

                    <p:column headerText="Suola">
                        <h:outputText value="#{composition.sole}" />
                    </p:column>
                    <p:column rendered="#{testView.productionOrder.charm!=null}"
                        headerText="Charm">
                        <h:outputText value="#{testView.productionOrder.charm}" />
                    </p:column>
                </p:dataTable>
            </h:form>
        </div>
    </div>

</ui:define>

我在哪里错?为什么表格没有更新?这只是一个示例,因为实际项目正在使用MQTT来更改页面。问题是该方法后表未更新,因为id有一些问题:

java.lang.NullPointerException

21:21:49,342在org.primefaces.PrimeFaces $ Ajax.update(PrimeFaces.java:335)发生[stderr](Timer-7)错误21:21:49,342在org.primefaces.PrimeFaces $ Ajax.update(PrimeFaces.java:359)中出现[stderr](Timer-7)错误]

我在update中尝试了其他名称,但没有任何效果。

我正在尝试从bean更新JSF页面:@PostConstruct public void load(){Timer timer = new Timer(); timer.schedule(new TimerTask(){@Override public void run(){...

jsf websocket primefaces
1个回答
0
投票

您不在JSF上下文中,因为update是从异步线程(计时器)启动的。

© www.soinside.com 2019 - 2024. All rights reserved.