【问题标题】:Unable to refresh datatable in jsf after tab change标签更改后无法刷新jsf中的数据表
【发布时间】:2012-12-11 23:13:42
【问题描述】:

这是我的要求。我应该添加一条记录,成功添加并单击“查看”选项卡后,数据表应该刷新,但表保持不变。我正在使用 getter 方法从支持 bean 将数据提取到数据表中。

内部数据表:

<p:dataTable id="ci_table" value="#{ciConfigBean.ciList}" var="cid" scrollable="true" selectionMode="single" selection="#{ciConfigBean.ciConfigSave}"
            rowKey="#{cid.ciConfigId}" editable="true" resizableColumns="true">

我什至尝试通过 onTabChange 事件调用 javascript 方法。

第一个功能:

function onLoad() {
             alert("tab"); 
            var oTable;
            oTable = $('#ci_table').dataTable();
            oTable.fnClearTable( 0 );
            oTable.fnDraw();
        }

第二个功能:

var oTable;
            $(document).ready(function() {
                    oTable = $('#ci_table').dataTable({
                        "bProcessing" : true,
                        "bServerSide" : true,
                        "sAjaxSource" : '${request.contextPath}'
                                + '/ciConfigBean/getCiList'
                        });
                        oTable.fnReloadAjax();
                });

标签更改代码:

<p:tab id="ci" title="CI">
            <p:tabView id="insideCi" onTabChange="onLoad()"
                activeIndex="#{home.activeInner}">
                <p:tab id="ciList" title="CI List">
                    <ui:include src="ci/ciList.xhtml" />
                </p:tab>
                <p:tab id="newCi" title="New CI">
                    <ui:include src="ci/newCi.xhtml" />
                </p:tab>
            </p:tabView>
        </p:tab>

但似乎没有任何效果。对此有何建议?

【问题讨论】:

    标签: java javascript jquery jsf datatable


    【解决方案1】:

    尝试在 tabview 标签上添加 dynamic="true"。假设您的保存方法有效,那应该可以解决问题,而我从您的帖子中看不到。不需要 JavaScript。

    【讨论】:

    • 我尝试使用“动态”属性。但还是没有结果。我在 New CI 选项卡中添加了一条新记录,并成功保存。在此之后,如果我单击“查看”选项卡,则不会刷新列表。
    • 我尝试过使用 dynamic="true",但它不起作用。每当我在新 CI 选项卡中创建新值时,它都会成功保存在数据库中。但是当我选择 CI >List 时,数据表没有填充新值。
    • 你能查询实际的数据库,看看记录是否真的存在吗?如果是这样,刷新整个页面时数据表是否会更新?你在使用惰性数据表吗?同样,如果您发布您的 bean 代码,它会更容易为您提供帮助。
    • 我检查了数据库,保存成功,但是新添加的值没有反映在数据表中。仅当我再次重新加载整个页面时,数据表才会更新为新值,直到数据表没有变化。
    • 你没有使用惰性数据模型吗?如果没有,您必须手动重新加载您提供给 dataTable 组件的列表。
    【解决方案2】:

    @Andre,当我刷新整个页面时,数据表将更新。但是当我更改选项卡时它不会更新。这是我的 bean 中的 Save 方法:

    public void saveCiConfig() throws SystemException {
        long ciId = CounterLocalServiceUtil.increment(CIConfig.class
                        .getName());
                ciConfigSave.setCiConfigId(ciId);
                ciConfigSave.setProjectId(0);
                ciConfigSave.setParentCIConfigId(0);
                ciConfigSave.setCreatedDate(new Date());
                ciConfigSave.setCreatedBy(FacesUtil.getUserId());
                ciConfigSave.setUpdatedDate(null);
                ciConfigSave.setUpdatedBy(0);
                if (enable == Boolean.TRUE) {
                    ciConfigSave.setStatus(DataConstant.STATUS_ACTIVE);
                } else {
                    ciConfigSave.setStatus(DataConstant.STATUS_INACTIVE);
                }
                ciConfigSave.setSetupComplete(Boolean.FALSE);
                try {
                      CIConfigLocalServiceUtil.addCIConfig(ciConfigSave);
                    FacesMessageUtil
                            .addGlobalInfoMessage("ci.message.submitSuccess");
                    new Home().setActiveOuter(0);
                    new Home().setActiveInner(1);
                    setEditMode(Boolean.FALSE);
                    resetInit();
                } catch (SystemException e) {
                    FacesMessageUtil
                            .addGlobalErrorMessage("ci.message.submitFailed");
                    log.error("error while saving the CI Configuration", e);
                }
    

    【讨论】:

      【解决方案3】:

      好吧,我猜没有合适的方法可以这样做......所以作为一种解决方法,我添加了一个命令按钮来手动刷新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-09
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多