我正在使用动态视图面板在单个XPage中显示各种视图。这导致了一些问题。首先,视图内的列样式设置不会显示在 XPage 上(例如:使列标题变粗)。更重要的是,虽然视图包含指向视图内文档的链接,但链接都附加了action=editDocument
,我想将其更改为action=openDocument
。但是,我找不到任何方法来更改此属性。
3 回答
您需要为此使用定制器 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>
如果您想使用其表单而不是使用 XPage 打开文档,那么您可以这样做,其中rowData
var 是 ViewPanel
<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
在 SSJS 中,您可以通过添加以下内容来尝试文档中的链接:
context.redirectToPage(@ReplaceSubstring(context.getUrl().toString(),"editDocument","openDocument"));