数据库列表包含错误的对象

时间:2015-08-05 14:07:15

标签: xwiki

目标:

使用有关驱动程序的文档创建数据库。我们的想法是创建供应商和协议条目,并链接它们,如下所示:在协议创建表单中,我想选择哪个供应商支持此协议。

的方法:

我使用Create your own!按钮创建了以下2 Applications

  1. 供应商
  2. 协议
  3. 在协议创建页面中,我放置了Database List字段。具有以下属性:

    • 名称=供应商
    • 显示类型=选择
    • Multiple select = false
    • hibernate query:我把这个字段留空了。
    • xwiki class name = VendorsCode.VendorsClass
    • ID字段名称= doc.name
    • 值字段名称:我将此字段留空。

    问题:

    令我惊讶的是,这有效,但并非完全如此。当我打开表单添加协议时,在供应商下拉列表中,现在不仅有供应商,还有其他几个对象,例如:"Blog.BlogIntroduction"。显然,我不希望在列表中出现这种情况。 为什么会在那里,我怎么能把它拿出来?

    我也尝试在doc.name框中添加值value field name。但这实际上只会让情况变得更糟。现在该列表仅包含" Blog.BlogIntroduction"。

    Image

    请注意,这是xwiki的全新安装。这个数据库没什么特别的。

1 个答案:

答案 0 :(得分:2)

这里发生了什么?

您看到的是数据库列表中选择项的默认值,因为它存储在“协议”对象的模板页面中。

初始化新的数据库列表以显示博客帖子列表,其中“XWiki类名称”的默认值为Blog.BlogPostClass。 (您可以通过在步骤2中创建新的Database List字段并打开该字段的编辑视图来尝试此操作;只需在完成后删除它。)对于全新安装的Wiki,有两篇博文:“博客页面“Blog.BlogPageTemplate中的模板和Blog.BlogIntroduction中的博客简介帖子。这两个项目最初都显示出来了。

在“XWiki Class name”字段中填写您的类的值后,XWiki有机会找到可能值的实际列表。  然而,它保留了第一次尝试时所选的“默认值”(即使它没有任何意义)。

这对我来说似乎是个错误,至少从用户体验来看。

如何解决

第一步:您的列表仅包含虚假“默认值”的原因可能是您所提供的课程不存在。 从我在截图中看到的,类名对我来说看起来不错,但是这个字段不能容忍任何类型的拼写错误,甚至类似于类名之前的空格。如果名称不完全适合,它会给出(几乎)空列表。

如果您无法使用类名并希望改为使用HQL路径,请使用HQL字段

, BaseObject as obj where doc.fullName = obj.name 
  and obj.className = 'VendorCode.VendorClass'
  and doc.fullName != 'VendorCode.VendorTemplate'

doc.fullName同时为idvalue字段。这样做的另一个好处是模板供应商在下拉列表中不可用,只有“真实”对象。

在您设法修复该类的名称后,您应该会看到所有供应商对象的列表(包括VendorCode.VendorTemplate,除非您使用了HQL路由),其余的假的默认值。现在,您可以继续下一步:

第二步:如果您设法修复了类名,则会在默认值旁边的下拉列表中看到您的供应商;现在是时候摆脱伪造的默认值了。为此,转到应用程序的模板对象; e.g。

  • 按照“协议”应用程序
  • 的起始页面上的“编辑应用程序”链接进行操作
  • 然后查看字段定义下方三个复选框的框;最上面的复选框显示“更新类模板”
  • 这部分包含一个名为“ProtocolTemplate”的链接。
  • 点击该链接,最后到达模板页面
  • 在模板页面上,单击编辑并从供应商下拉列表中选择其他一些值,然后单击“保存”。

现在应该从供应商的选择中消除“BlogSomething”值。

可选步骤(不回答问题,但无论如何都可能感兴趣)

如果您希望模板中没有预先选择任何值,则需要更多步骤:

  • 在应用程序编辑中,编辑字段并选择“多选”并显示类型“复选框”
  • 转到编辑器中的“下一步”,然后返回到“上一步”
  • 的字段编辑
  • 取消选中所选供应商条目旁边的复选框,然后打开字段编辑器并将“显示类型”设置回复选框并取消设置“多选”复选框。
  • 进入“下一步”和“完成”

之后,如果您创建一个新的“协议”条目,则会预先选择一个空的“供应商”。