【问题标题】:How to refresh jsf page after pagination分页后如何刷新jsf页面
【发布时间】:2014-06-21 13:57:01
【问题描述】:

我在 jsf + icefaces 中创建了 selectALL 复选框功能。我已经实现了一些功能,比如当我选中 selectAll 复选框时,它会选择所有页面中的所有复选框。但是当我进行分页并且如果我选中/未选中选中所有复选框时,它仅适用于该页面而不是所有页面。我的意思是行复选框的状态不一致。我尝试了 phaseListener 来解决这个问题,但没有运气.. 任何人都可以建议我解决方案..

我的代码:jsf

<ace:column id="checkBox">
                                <f:facet name="header">
                                    <h:outputLabel>
                                        <ice:selectBooleanCheckbox id="selectAllID"
                                            value="#{shipBean.checkAll}"
                                            valueChangeListener="#{shipBean.getCheck}"
                                            partialSubmit="true" />
                                    </h:outputLabel>
                                </f:facet>
                                <ice:selectBooleanCheckbox id="selectOne"
                                    value="#{freight.checkBox}">

java:

    if (shipTrackingData != null) {

                if (shipTrackingData.getCheckAll()) {

                    for (ShipTrackBean check : shipTrackingData
                            .getShipTrackList()) {
                        check.setCheckBox(true);
                    }

                } else {
                    for (ShipTrackBean check : shipTrackingData
                            .getShipTrackList()) {

                        check.setCheckBox(false);
                    }
                }
            }

谢谢...

【问题讨论】:

  • 托管 Bean 的范围是什么。我认为您应该在 java 代码中获得一致的复选框值,但它们可能不会反映在 UI 上。如果您可以在转到上一页或下一页时启用 ajax 功能,并且如果您可以通过读取应该具有一致值的 bean 来呈现值,那么它可能会起作用。
  • @Manish 感谢您的回复.. 它是会话范围的管理 bean,我也尝试使用 viewscoped..

标签: jsf jsf-2 icefaces


【解决方案1】:

我已经为一个 JSF 应用程序测试过这段代码,我有三个页面:

index_1.xhtml index_2.xhtml index_3.xhtml

@ManagedBean
@SessionScoped
public class pross {
    private boolean challval=false;
    private boolean chval1=false;
    private boolean chval2=false;
    private boolean chval3=false;
.. getters and setters....
}

在每个页面中,我创建了两个复选框,如果在其中任何一个中选中,其中一个将在所有页面中选中,但该复选框与所有页面的相同值 (challval) 相关。 页面本身还有另一个复选框,每个复选框 (chval1,chval2,chval3)。

为了测试这一点,我为每个页面编写了这个 xhtml 代码,但是您需要根据每个页面更改值,这里是 index_1.xhtml 的代码,您需要更改“转到”链接才能访问其他页数:

 <h:body>
        <h:form>
        Hello, Test checkboxes:
        <br />
        Select this page: <h:selectBooleanCheckbox value="#{pross.chval1}" >
            <f:ajax render="outthis outall"/>
        </h:selectBooleanCheckbox>
        This page select: <h:outputText id="outthis" value="#{pross.chval1}"/>
        <br/>
        Select all pages: <h:selectBooleanCheckbox value="#{pross.challval}">
            <f:ajax render="outthis outall"/>
        </h:selectBooleanCheckbox>
        all pages select: <h:outputText id="outall" value="#{pross.challval}"/>
        <br/>
        <h:link outcome="index_2" value="Go to page 2" />
        <br/>
        <h:link outcome="index_3" value="Go to page 3" />
        </h:form>
    </h:body>

我看这里没有问题,当我在一个页面中选中“全选”时,其他页面仍然选中,我认为这个想法是将“全选”复选框与所有页面的相同 bean 值连接起来。 希望这有用,谢谢。

【讨论】:

  • @Tiyab 感谢您的回复.. 但我正在使用带有单个 xhtml 页面的分页数据表。在这里,当您执行分页选择所有功能失败时会发生什么......你是对的,它应该采用相同的 bean 值..
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多