0

目标:

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

方法:

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

  1. 供应商
  2. 协议

在协议创建页面中,我放置了一个Database List字段。具有以下属性:

  • 名称 = 供应商
  • 显示类型 = 选择
  • 多选 = 假
  • 休眠查询:我将此字段留空。
  • xwiki 类名 = VendorsCode.VendorsClass
  • ID 字段名称 = doc.name
  • 值字段名称:我将此字段留空。

问题:

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

我也尝试doc.namevalue field name框中添加值。但这实际上只会使情况变得更糟。现在列表只包含“Blog.BlogIntroduction”。

图片

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

4

1 回答 1

2

这里发生了什么?

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

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

在“XWiki 类名”字段中填写类的值后,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 路线),以及剩余的虚假默认值。现在您可以继续下一步:

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

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

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

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

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

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

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

于 2015-08-10T14:20:31.793 回答