xpages列showCheckbox

时间:2014-08-13 12:15:31

标签: xpages

viewPanel有一列showCheckbox="true"

是否可以限制用户只选择viewPanel列出的一行/文档(而不是多行/文档)?

4 个答案:

答案 0 :(得分:6)

不在视图面板中。 View Panel旨在提供一种功能受限的快速简单方法。

另一种(可能更好的)方法可能是让另一列具有链接或图像,以触发您需要的任何功能。这将允许用户通过单击而不是两次触发功能。 View Panel允许您将控件放在列中,而不是仅映射到基础视图中的列。

或者,您可以手动将复选框添加到列,映射到范围变量,然后以编程方式选中/取消选中。

答案 1 :(得分:3)

保罗可能是对的。我的另一种选择是使用重复控制。你可以随心所欲地看它。包括视图控件。

我在这个NotesIn9节目中有一个例子:http://notesin9.com/index.php/2011/07/11/notesin9-ee-009-using-java-hashmaps-and-treemaps-with-xpages/

现在我的例子中我做了多个值。但是如果你将“选定的”文档id保存在一个单独的值字段中,而不仅仅是一个范围变量,那么如果不是HashMap或ArrayList,那么你就得到了你想要的东西。一次一份文件。

答案 2 :(得分:2)

我同意Paul Stephans(也赞成他的答案,因为我认为这将是Nest解决方案)但是如果你坚持在viewPanel中添加这样的功能,你可以通过添加客户端脚本来防止用户选择多个元素:

首先将styleClass="rowCB"添加到您的复选框行,然后将此代码插入您的xpage:

<xp:scriptBlock>
    <xp:this.value><![CDATA[dojo.ready(function(){
    dojo.query('.rowCB>input').connect("onclick", function(evt){ 
              var target = evt.target.id;
              if(!window.crrCheckedElement){
                window.crrCheckedElement = evt.target.id;
              }else if(window.crrCheckedElement != target){
                    alert("You can select only one item!");
                    evt.target.checked = false;
              }else if(window.crrCheckedElement == target){
                  window.crrCheckedElement = "";
              }
            })
    });]]></xp:this.value>
</xp:scriptBlock>

Maby代码需要一些改进,但这应该是您的选择。

答案 3 :(得分:1)

虽然可能不是最佳解决方案,但这是一种可能性。

function deselectOtherDocs(viewName, currentDocId) {
var viewPanel:com.ibm.xsp.component.xp.XspViewPanel = getComponent(viewName);
var selectedIds = viewPanel.getSelectedIds();
for(var i=0; i<selectedIds.length; ++i){
if(selectedIds[i]!=currentDocId){viewPanel._xspSetIdUnchecked(selectedIds[i])}
return;
}

在检查文档时将其关闭并传递视图控件名称和当前文档的unid。

请原谅任何错别字。我正在通过手机写信。

编辑:如果你不必使用视图控件,那么David Leedy的建议就是你要走的路。将选定的unid存储在范围变量中,然后确定选择了哪个重复行框。您也可以考虑使用单选按钮而不是复选框,因为前者被用户理解为单个选择器。