使用动态视图面板

时间:2012-04-29 14:19:15

标签: lotus-notes xpages

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

3 个答案:

答案 0 :(得分:8)

您需要为此使用自定义程序bean,并将该bean的名称添加到Dynamic View Panel控件的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>

答案 1 :(得分:5)

如果您想使用其表单而不是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

答案 2 :(得分:0)

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

context.redirectToPage(@ReplaceSubstring(context.getUrl()的toString(), “editDocument”, “使用openDocument”));