【问题标题】:Using a Dynamic View Panel使用动态视图面板
【发布时间】:2012-04-29 14:19:15
【问题描述】:

我正在使用 动态视图面板 在单个 XPage 中显示各种视图。这导致了一些问题。首先,视图内的列样式设置不会显示在 XPage 上(例如:使列标题变粗)。更重要的是,虽然视图包含指向视图内文档的链接,但链接都附加了action=editDocument,我想将其更改为action=openDocument。但是,我找不到任何方法来更改此属性。

【问题讨论】:

    标签: lotus-notes xpages


    【解决方案1】:

    您需要为此使用定制器 bean,并将该 bean 的名称添加到动态视图面板控件的 customizerBean 属性中。

    在定制器 bean 中,您可以控制样式,例如您正在寻找的样式,但您需要自己编写 Java bean 代码。 Jesse Gallagher 创建了一个很好的扩展定制器 bean 示例,甚至将其放在 Github 上:https://github.com/jesse-gallagher/Domino-One-Offs

    看看他关于这个主题的博客文章:

    --

    对于将 editDocument 更改为 openDocument 的具体问题,您可以使用以下自定义程序 bean 的小示例:

    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import com.ibm.xsp.extlib.builder.ControlBuilder.IControl;
    import com.ibm.xsp.extlib.component.dynamicview.DominoDynamicColumnBuilder.DominoViewCustomizer;
    import com.ibm.xsp.extlib.component.dynamicview.UIDynamicViewPanel.DynamicColumn;
    import com.ibm.xsp.extlib.component.dynamicview.ViewDesign.ColumnDef;
    
    public class customizer extends DominoViewCustomizer{
      @Override
      public void afterCreateColumn(FacesContext context, int index, ColumnDef colDef, IControl column) {
        //Create a variable for the current component
        UIComponent columnComponent = column.getComponent();
        //Create a reference to the column and set the links to open in read mode
        DynamicColumn dynamicColumn = (DynamicColumn) columnComponent;
        dynamicColumn.setOpenDocAsReadonly(true);
        super.afterCreateColumn(context, index, colDef, column);
      }
    }
    

    记得将类添加到 faces-config.xml 以便能够将其用作 bean。

    您可以使用 onColumnClick 事件来代替定制器 bean 来执行您自己的重定向。这是一个例子:

    <xe:dynamicViewPanel value="#{viewdatasource}" id="dynamicViewPanel1" var="viewEntry" pageName="/page.xsp">     
        <xp:eventHandler event="onColumnClick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:var url="/page.xsp?action=openDocument&documentId="+viewEntry.getNoteID();
    context.redirectToPage(url);
    }]]></xp:this.action>
        </xp:eventHandler>
    </xe:dynamicViewPanel>
    

    【讨论】:

    • 谢谢!我现在已经使用 eventHandler 来解决 openDocument 问题,我将着眼于实现自定义程序 bean 来解决其他琐碎的问题。
    • 1 单击 属性 - 比创建 Bean 简单得多。
    • Charles,除了问题是关于动态视图面板的使用。
    【解决方案2】:

    如果您想使用其表单而不是 XPage 打开文档,那么您可以这样做,其中rowData 是 ViewPanel 的 var

    <xp:eventHandler event="onColumnClick" submit="true" refreshMode="complete" id="eventHandler1">
        <xp:this.action><![CDATA[#{javascript:if (!rowData.isCategory())
            var url = "0/"+rowData.getUniversalID()+"?OpenDocument"
            facesContext.getExternalContext().redirect(url);}]]>
        </xp:this.action>
    </xp:eventHandler
    

    【讨论】:

    • 需要指出的一点是 onColumnClick 事件仅响应您在视图中的活动列链接(不是所有列),因此如果您没有在视图列中主动启用任何列weblinks 只有第一列是一个链接。
    【解决方案3】:

    在 SSJS 中,您可以通过添加以下内容来尝试文档中的链接:

    context.redirectToPage(@ReplaceSubstring(context.getUrl().toString(),"editDocument","openDocument"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多