我只有 <p:dataTable/>
。当我在另一个页面中的该表中添加新行时,该表不会刷新。Rmabean是管理范围的范围。有什么想法吗?
<h:form id="mainMenuForm">
<p:dataTable id="dataTable"
var="case"
value="#{RmaBean.rmaModel}"
widgetVar="rmaTable"
editable="true"
rows="10" paginator="TRUE" emptyMessage="No items found with given criteria.">
...
<p:column></p:column>
<p:column></p:column>
<p:column><p:commandButton action="#{MainController.talletaUusiRma}" value="#{bundle.newRma_tallenna}" immediate="true" ajax="false" style="width: 220px;"/></p:column>
</p:row>
当我在该表中添加一个新对象时,我每次都会更新rmaModel
,甚至检查列表是否比以前更长,并且有新对象。数据表显示仍然没有新对象的旧数据,为什么?
--------创建新的RMA ----------------------
public String prepareNewRma() {
current = new Rma();
current.setUser("");
return "newRma";
}
---------将数据以序列号获取新的RMA -------
public String haeTiedotSarjanrolla() {
log.info("sarjanro=" + current.getSarjanro());
System.out.println("---------------->sarjanro=" + current.getSarjanro());
Sarjanumerot s = helper.getSerialInfo(current.getSarjanro());
if (s != null) {
current.setAn8(s.getAn8());
current.setDsc1(s.getDsc1());
current.setDsc2(s.getDsc2());
current.setSarjanro(s.getId().getLotn());
current.setTuotenro(s.getId().getLitm());
}
return "newRma";
}
--------保存新的RMA -------------------
public String talletaUusiRma() {
current.setCreated(new Timestamp(System.currentTimeMillis()));
helper.tallennaRma(current);
rmaNumbers = null;
RmaBean papu = (RmaBean) JsfUtil.findBean("rmapapu");
papu.updateTable();
return "mainMenu";
}
助手:
public void tallennaRma(Rma current) {
try {
Session session = HibernateUtil.getAsekorjausSessionFactory().getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(current);
session.getTransaction().commit();
} catch (Exception e) {
log.debug(e.getMessage());
JsfUtil.addErrorMessage(ResourceBundle.getBundle("resources/Bundle").getString("editRma_err_updateError"));
}
-----------------------------------------------------------------
public void updateTable(){
System.out.println("updateTableupdateTableupdateTable");
rmaModel.setWrappedData(rmaModel.getUpdatedList());
System.out.println("1111111..........");
List<Rma> rmat = rmaModel.getUpdatedList();
System.out.println("22222222.......");
Iterator iter = rmat.iterator();
System.out.println("------------------------>PITUUS: " +rmat.size());
while (iter.hasNext()) {
Rma t = (Rma) iter.next();
System.out.println("t.getRma()NUMERO------->" +t.getRma());
}
RmaDataModel newRMAModel = new RmaDataModel(rmat);
rmaModel = newRMAModel;
}
sami
dataTable的值属性在会话范围内,因此您的数据词只会在本会话中的第一个请求上渲染(如果您不手动更新此视图)。
使用视图范围的bean进行视图。如果有必要此列表在会话范围中,则只需将列表从任何会话范围的bean注入您的视图scoped bean。
如果我很好地了解您的问题,则要在另一个页面中完成操作时要更新一个页面,而AJAX更新不会自动完成。必须用推动来完成。您在PrimeFaces展示中有几个示例:
http://www.primefaces.org/showcase/push/index.jsf
第一个示例:
<h:form id="form">
<h:outputText id="out" value="#{globalCounter.count}" styleClass="ui-widget display" />
<br />
<p:commandButton value="Click" actionListener="#{globalCounter.increment}" />
</h:form>
<p:socket onMessage="handleMessage" channel="/counter" />
bb
public synchronized void increment() {
count++;
PushContext pushContext = PushContextFactory.getDefault();
pushContext.push("/counter", String.valueOf(count));
}
我做了一个真正的泡泡糖解决方案,因为否则我无法安装它。我只是再次写下bean进行会话,所以它越过旧的,名称为" rmapapu"。不,它正在工作。有什么后果还是这真的很糟糕?
rmaModel = null;
RmaDataModel rmaModel = new RmaDataModel(rmat);
//rmaModel = newRMAModel;
this.setRmaModel(rmaModel);
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
HttpSession httpSession = request.getSession(false);
httpSession.setAttribute("rmapapu", this);
感谢大家帮助我。我仍然会阅读有关此的balusc教程,因为很高兴知道您应该如何做:)
sami