我需要使用managedbeans生成的新数据不断更新页面。 Managedbean每隔几分钟创建一个新的值列表,UI必须为managedbean新创建的List中的每个值创建一个OutputText。 Catch是,UI应该保留outputTexts并为每个请求添加新的一个,它不应该刷新/删除旧的outputTexts。
我的代码如下所示 - 为每个ajax调用更新相同的outputText字段,我需要像上面提到的那样进行更改。
<c:forEach var="data" items="#{myBean.dataList}">
<p:fieldset legend="#{data}" toggleable="true" toggleSpeed="500">
<h:panelGrid columns="2" cellpadding="5" border="0">
<p:scrollPanel style="height:300px">
<p:poll interval="2" listener="#{myBean.getDataList}" update="field1 field2"/>
<h:outputText value="#{data.field1}" id="field1"/>
<h:outputText value="#{data.field2}" id="field2"/>
</p:scrollPanel>
</h:panelGrid>
</p:fieldset>
</c:forEach>
因此,对于每个ajax调用,由managedbeans生成的数据项可能很少,并且对于每个项都应该有一个新的outputText字段。
答案 0 :(得分:0)
您可以使用<h:outputText value="#{data.field1}" id="field1"/>
制作一个列表并将它们用作输出文本,是的,你需要一些css格式,因为datalist使用了默认的css。示例代码
<p:poll interval="3" listener="#{yourbean.yourmethod}" update="<updatecomponet>" />
<p:dataList value="#{yourbean.tempList}" var="s" id="updatecomponet">
<p:outputLabel value="#{s}"></p:outputLabel>
</p:dataList>
注意:轮询调用侦听器时,需要在列表中添加值。它正在我的项目中工作,让我知道其他任何事情。希望这会有所帮助。
答案 1 :(得分:0)
也许不是完美的解决方案,但您可以使用延迟加载的DataTable,poll组件可以更新数据表页面,而您不需要更新大量组件。
编辑: 的 XHTML 强>
<p:dataTable var="v"
value="#{myBean.getLazyList}"
scrollRows="1"
liveScroll="true"
rows="20"
scrollHeight="300"
lazy="true"
scrollable="true"
id="tsUpdates">
<p:column>
<h:outputText value="#{v.fields1}" />
</p:column>
</p:dataTable>
<强>豆强>
public class Bean {
private LazyDataModel<MyClass> lazyList;
@Named("myBean")
@ViewScoped
@PostConstruct
public void init() {
lazyList = new LazyMyClassModel(); //where myList is your data source
}
//getters and setters
}
<强> LazyModel 强>
public class LazyMyClassModel extends LazyDataModel<MyClass>{
private Integer findAllCount;
public LazyMyClassModel(){
}
@Override
public List<MyClass> load(int first, int pageSize, String sortField, SortOrder sortOrder,Map<String, String> filters){
List<MyClass> myList = //your live source of data
List<MyClass> data = new ArrayList<MyClass>();
data = getSubList(MyList, first, pageSize)
if (findAllCount == null) {
findAllCount = myList.size
this.setRowCount(findAllCount);
}
return data
}
public List<MyClass> getSubList(List<MyClass> list, int fromIndex, int toIndex) {
int size = list.size();
if (fromIndex >= size || toIndex <= 0 || fromIndex >= toIndex) {
return Collections.emptyList();
}
fromIndex = Math.max(0, fromIndex);
toIndex = Math.min(size, toIndex);
return list.subList(fromIndex, toIndex);
}
}