【问题标题】:xpages error when trying to access edit mode in client notes尝试在客户端注释中访问编辑模式时出现 xpages 错误
【发布时间】:2014-09-16 07:32:14
【问题描述】:

我正在尝试打开一些文档。从客户端注释内的视图面板。该应用程序还可以在 Web 上运行。

当我打开文档时。在阅读模式下,然后单击编辑按钮:

<xp:button value=" Editare" id="buttonEdit"
            rendered="#{javascript:!currentDocument.isEditable()}" >

        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action>
                <xp:changeDocumentMode mode="edit" var="Contr"></xp:changeDocumentMode>
            </xp:this.action>
        </xp:eventHandler>
</xp:button>

我收到以下错误:

例外

java.lang.String 与 javax.faces.model.SelectItem 不兼容

这只发生在notes客户端中。

来自堆栈跟踪:

 com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(Unknown Source)
 com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(Unknown Source)
 com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(Unknown Source)
 com.ibm.xsp.renderkit.html_basic.MenuRenderer.encodeEnd(Unknown Source)
 .... .... 

一一删除combo后,发现错误就在这一项,值是:

var a = [].concat(@Unique(@DbColumn(dbname, "vwA", 0))).sort();
var b = @Unique(@DbColumn(@DbName(),"vwB",0));
return a.concat(b);

任何想法为什么/以及如何解决此问题?

【问题讨论】:

  • 异常指的是一个 SelectItem,您通常会发现它嵌套在组合框或类似的东西中。请张贴您页面的那部分;您发布的部分绝对简单;我认为这种代码在 Xpages 中很常见,无论是在浏览器中还是在 XPinC 应用程序中
  • @LotharMueller 我正在使用许多组合框元素。我能否准确找到问题仍然存在的组合框?
  • 如果它不在详细的运行时错误消息中,它可能在堆栈跟踪中的某个位置;尝试从头到尾通过它。您很可能会在某处找到熟悉的元素,例如组合 ID 或其他东西
  • 所以,复制 XPage。一次删除一个组合框,直到它停止抛出错误。那就是要解决的问题。
  • @LotharMueller 我没有看到任何熟悉的元素,例如组合框 ID

标签: xpages lotus-notes xpages-ssjs


【解决方案1】:

错误很可能来自您的 SSJS 变量dbname。请仔细检查该变量设置了哪个值。

如果 dbnamestring 而不是 array,我会收到相同的错误 java.lang.String incompatible with javax.faces.model.SelectItem

【讨论】:

  • 我现在找到了:session.getServerName 在 Notes 客户端中没有返回任何内容。
  • 我更正了它,现在它可以工作了。感谢您的帮助!
【解决方案2】:

遗憾的是,在隔离错误时,堆栈跟踪对我没有多大帮助。但是,我可以猜测您的问题是 selectItems (复数)的值设置为字符串而不是具有多个值的值。一个 selectItem(单数)可以有一个字符串作为它的值,但不能有一个 selectItems(复数)。

因此,组合框的这组 selectItems 是有效的:

<xp:selectItems>
    <xp:this.value><![CDATA[#{javascript:applicationScope.globalSettings.allCurrencies}]]></xp:this.value>
</xp:selectItems>

就像这个:

<xp:comboBox id="emailTypeCB1" value="#{newOrgDoc.EMailType}">
    <xp:this.defaultValue><![CDATA[#{javascript:var keywordChoices = new TS_Keywords();
var tmp = keywordChoices.Lookup("Contact / email types", true);
return keywordChoices.getDefaultValue();}]]></xp:this.defaultValue>
    <xp:selectItem itemLabel="-- choose --" id="selectItem14">
    </xp:selectItem>
    <xp:selectItems id="selectItems12">
        <xp:this.value><![CDATA[#{javascript:return new TS_Keywords().Lookup("Contact / email types", true);}]]></xp:this.value>
    </xp:selectItems>
</xp:comboBox>

但是,如果我尝试了这个,如果 viewScope.myChoices 是一个字符串而不是具有多个值的东西,它将无法工作:

<xp:comboBox id="emailTypeCB1" value="#{newOrgDoc.EMailType}">
    <xp:selectItems id="selectItems12">
        <xp:this.value><![CDATA[#{javascript:viewScope.myChoices;}]]></xp:this.value>
    </xp:selectItems>
</xp:comboBox>

我认为不同之处不仅在于您在 XPiNC 中打开了一个,而在浏览器中打开了一个,而且在每个中设置的值都不同 - 当您在 Notes 中时以字符串形式结束。

【讨论】:

  • 感谢您的提示。我更新了我的问题/我想我找到了导致此问题的组合框。
  • session.getServerName 在 Notes 客户端中不返回任何内容。用一个简单的字符串更正它,现在它可以工作了。感谢您的帮助,@DavidNavarre。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多