我正在尝试从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上下文中,因为update
是从异步线程(计时器)启动的。