隐藏ViewPanel中的列

时间:2018-05-24 09:58:37

标签: xpages

我使用标准的viewPanel在XPage中显示视图数据。 该应用程序正在使用Bootstrap3.2.0。

为了使呈现的表响应,我向头部和列添加了一些引导类。

package com.db.nsw.izt;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class UserNameBean {
    private String fName = "";
    private String lName = "";

    public String getfName() {
        return fName;
    }
    public void setfName(String fName) {
        this.fName = fName;
    }
    public String getlName() {
        return lName;
    }
    public void setlName(String lName) {
        this.lName = lName;
    }

    public String submitRequest(){
        System.out.println("@@@ " + fName + " | " + lName);
        return "response";
    }
}

当我调整浏览器窗口大小时,列被正确隐藏,但标题仍然存在。显然,styleClasses不会添加到th标签,而是添加到th。

内的标签
<xp:viewColumn columnName="StatusDescription"
    id="viewColumn4" styleClass="hidden-xs hidden-sm">
        <xp:viewColumnHeader value="Status"
            id="viewColumnHeader4" styleClass="hidden-xs hidden-sm">
        </xp:viewColumnHeader>
</xp:viewColumn>

结果是表头与显示的数据不同步。

有人知道如何在th标签中获得样式类吗?

1 个答案:

答案 0 :(得分:3)

在我看来,视图类渲染器或视图列定义属性或两者都搞乱了。

您可能希望<xp:viewColumnHeader styleClass="hidden-xs hidden-sm">控制th样式类,但正如您所看到的那样。

为了实现您要执行的操作,您可以尝试为DataTableRendererEx的viewPanel扩展渲染器类。但是这种方法对你来说可能看起来很古怪,而且个人认为IBM认为IBM已经将许多类的方法声明为私有,这会迫使你重写代码的大部分代码,只是为了让你有所帮助。你需要改变。

在代码实际上为headerClass寻找xp:viewColumn属性的意义上,会有一些希望。但是,瞧,该属性没有为组件明确定义,事实上,您没有在Designer的viewColumn的其他属性中看到它。即使您通过xsp源代码透视图明确地编写它,Designer也不允许您这样做,它将无法编译。您可以要求IBM修复viewColumn组件的属性定义文件,但坦率地说我不知道​​它是多么可行:XPages处于失修状态。

所以我能为您提供的是一种解决方法。有一种方法可以通过主题定义潜入属性(我写了一些关于它的in this blog article)。因此,为了使用此变通方法,您必须使用主题。如果您已经拥有它,您只需添加此规则:

<control>
    <name>Column.View.Hidden</name>
    <property>
        <name>headerClass</name>
        <value>hidden-xs hidden-sm</value>
    </property>
    <property>
        <name>styleClass</name>
        <value>hidden-xs hidden-sm</value>
    </property>
</control>

控件名称是任意的。通常,我使用对照系列的原始名称 - Column.View - 并在此情况下附加变体的名称 - .Hidden。如果它只是Column.View,则规则将适用于所有viewColumns。使用Column.View.Hidden我有一个规则,我可以根据具体情况申请。 此时,我只需要为我想要表现不同的列指定不同的主题Id(themeId属性)。

<xp:viewColumn columnName="columnName" id="viewColumn1" themeId="Column.View.Hidden">
    <xp:viewColumnHeader value="columnHeaderName" id="viewColumnHeader1" />
</xp:viewColumn>