【问题标题】:Adding one or more outputText to existing page dynamically动态添加一个或多个 outputText 到现有页面
【发布时间】:2016-10-01 07:16:30
【问题描述】:

我需要使用 managedbeans 生成的新数据不断更新页面。 Managedbean 每隔几分钟创建一个新的值列表,UI 必须为 managedbean 新创建的 List 中的每个值创建一个 OutputText。关键是,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 字段。

【问题讨论】:

    标签: java primefaces


    【解决方案1】:

    &lt;h:outputText value="#{data.field1}" id="field1"/&gt;可以使用datalist

    制作一个列表并将它们用作输出文本,是的,您需要一些 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>
    

    注意:当轮询调用监听器时,您需要在列表中添加值。它在我的项目中工作,让我知道其他任何事情。希望这会有所帮助。

    【讨论】:

    • 但是每次ajax调用都会更新整个dataList,对吧?这可能会严重影响数百个数据项的性能。
    • 如果您需要添加任何新的输出标签,您必须更新视图吗?如果不是,他们就无法在没有触发更新的情况下在视图中添加任何新内容,为了提高性能,您可以仅在需要时更新数据列表,您可以在需要时签入回 bean 并从 bean 更新。如果您有任何解决方案,请告诉我我也想要这个解决方案。
    【解决方案2】:

    也许不是完美的解决方案,但是你可以使用延迟加载的 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);
        }
    }
    

    【讨论】:

    • 你能给我概述一下如何做吗?
    • coz,我尝试了以下方法, p:dataTable> ...
    • ...我的支持 bean 的 dataList 最初是空的,一段时间后它将开始生成数据...所以使用上面的代码,当 datalist 有一些值时,表根本不会自动加载.手动刷新网页后,似乎在 scolling 时加载了一些数据,但即使加载在某个时候停止。我不知道为什么,我无法清楚地理解代码的行为。
    • 您使用的是实时滚动,但原理相同。已经有一个问题了,看看这个:stackoverflow.com/questions/22194987/… 该示例每次获取 20 行,您需要一个 LazyModel 类,扩展 LazyDataModel 抽象类,并覆盖 load() 方法。将使用一些示例代码编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多