この問題の回避策は次のとおりです。ビュー パネルの列の並べ替えに URL パラメーターを使用します。
XPage の例:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.resources>
<xp:script src="/jssViewSort.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:viewPanel rows="30" id="viewPanel2">
<xp:this.facets>
<xp:pager partialRefresh="true" layout="Previous Group Next"
xp:key="headerPager" id="pager2">
</xp:pager>
</xp:this.facets>
<xp:this.data>
<xp:dominoView var="view1" viewName="_YOUR_VIEW_"></xp:dominoView>
</xp:this.data>
<xp:viewColumn columnName="Form" id="viewColumn3">
<xp:viewColumnHeader value="Form" id="viewColumnHeader3" iconSrc="#{javascript:getViewSortIcon(this)}">
<xp:this.attrs>
<xp:attr name="onclick">
<xp:this.value><![CDATA[#{javascript:getViewSortLink(this)}]]></xp:this.value>
</xp:attr>
</xp:this.attrs>
</xp:viewColumnHeader>
</xp:viewColumn>
</xp:viewPanel>
</xp:view>
使用されるビューには、「フォーム」という名前の並べ替え可能な列があり、両方向に並べ替えることができます。
そして、最適化も文書化もされていない SSJS ライブラリは次のとおりです。
/**
* returns a link for sorting a view panel
*
* @author Sven Hasselbach
* @version 0.1
*/
function getViewSortLink( colHeader:com.ibm.xsp.component.xp.XspViewColumnHeader ){
var col:com.ibm.xsp.component.xp.XspViewColumn = colHeader.getParent();
var vp:com.ibm.xsp.component.xp.XspViewPanel = col.getParent();
var ds:com.ibm.xsp.model.domino.DominoViewData = vp.getDataSource();
var curSortOrder = vp.getDataSource().getSortOrder();
var sortCol = context.getUrlParameter("sortColumn");
var sortOrder = context.getUrlParameter("sortOrder");
if( sortCol === col.getColumnName() ){
if( curSortOrder === null || curSortOrder === "" )
sortOrder = "ascending";
if( curSortOrder === "ascending" )
sortOrder = "descending";
if( curSortOrder === "descending" )
sortOrder = ""
}else{
sortOrder = "ascending";
sortCol = col.getColumnName();
}
return "window.location='" + context.getUrl().getPath() + "?sortColumn=" + sortCol + "&sortOrder=" + sortOrder + "'";
}
/**
* returns a view icon for sorting
*
* @author Sven Hasselbach
* @version 0.1
*/
function getViewSortIcon( colHeader:com.ibm.xsp.component.xp.XspViewColumnHeader ){
var col:com.ibm.xsp.component.xp.XspViewColumn = colHeader.getParent();
var vp:com.ibm.xsp.component.xp.XspViewPanel = col.getParent();
var ds:com.ibm.xsp.model.domino.DominoViewData = vp.getDataSource();
var curSortOrder = vp.getDataSource().getSortOrder();
var sortCol = context.getUrlParameter("sortColumn");
if( sortCol !== col.getColumnName() )
return "http://www.google.de/images/icons/product/chrome-48.png";
if( curSortOrder === "ascending" )
return "https://www.google.com/intl/de/images/icons/feature/alert-b42.png"
if( curSortOrder === "descending" )
return "https://www.google.com/intl/de/images/icons/product/calendar-42.png"
return "http://www.google.de/images/icons/product/chrome-48.png";
}
画像はCSSで調整できます。
お役に立てれば!