【问题标题】:How can I get the title of the referring page (item) from a modified version of feedback page in DSpace?如何从 DSpace 中的反馈页面的修改版本中获取引用页面(项目)的标题?
【发布时间】:2014-09-26 17:11:13
【问题描述】:

如何从修改后的反馈页面中获取项目的标题,就像在 jspui 中的“推荐这个项目”中一样?我还希望生成页面的结果 url 就像http://example.com/feedback?handle=123456789/123。我在之前的帖子中通过comment 提出了这个问题,但我不知道如何使用 HandleManager。我曾多次尝试使用 itemRequestForm 中的部分代码,但总是出现空指针错误。

    DSpaceObject dso = HandleUtil.obtainHandle(objectModel);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

我也尝试查看 /ViewArtifacts/sitemap.xmap,但现在我无法弄清楚我缺少什么。

【问题讨论】:

  • 哪一行代码给你一个 NullPointerException?乍一看,代码看起来很合理,但它被断章取义,因此很难确定哪一行(或几行)没有正常工作。
  • 另外,你要修改什么类?您在上面借用的代码看起来是一个“Action”类(扩展“AbstractAction”的一个),例如SendItemRequestAction。如果您尝试修改FeedbackForm,则此代码将不起作用,因为“objectModel”映射不存在。
  • 忽略我之前的评论。我现在注意到Fee​​dbackForm 扩展了AbstractDSpaceTransformer,它定义了“objectModel”映射。因此,您应该能够在 FeedbackForm 中使用此代码。可能我们只需要更多关于 NullPointerException 发生位置的信息。
  • 您好@tim-donohue,我实际上是从项目请求功能中借用了上面的代码,并尝试将其与反馈表集成。我的目标与DS-2099 非常相似。请参阅下面我对 Adan 回答的评论。

标签: java apache-cocoon dspace


【解决方案1】:

您可以在以下位置获取 DS-2099 的完整补丁:

https://github.com/arvoConsultores/DSpace/commit/3e971d70daaa4762a443c89fb7fa6f9e5b8e630d.patch

(提示:您可以在 github 的提交中添加“.patch”以查看补丁)

我觉得这里发帖太长了。

检查 SolicitarCorreccionForm 以显示标题和您想要使用我的其他响应从句柄获取数据的内容,而不是:

feedback.addPara(T_para1.parameterize(parameters.getParameter("handle","unknown")));

你应该这样做:

String handle=parameters.getParameter("handle","unknown");

  // context=new Context(); // Context exist in a form:

  DSpaceOBject dso = HandleManager.resolveToObject(context,handle);

  if (dso instanceof Item){
       Item item=((Item)dso);
       DCValue[] titles= item.getMetadata("dc", "contributor", "author",null); 

       feedback.addPara(titles[0].value); // check for nulls or multiple values;
  }

将标题发送到你应该做的邮件类:

feedback.addHidden("title").setValue(titles[0].value);

在 aspect/ViewArtifacts/sitemap.xmap 你应该设置参数:

<map:transform type="SolicitarCorreccionForm">
<map:parameter name="title" value="{title}" />
...

获取 SendSolicitarCorreccionAction 并发送到电子邮件,将参数添加到邮件中,例如:

String title= request.getParameter("title");
email.addArgument(title);    // Titulo
...

您想从

更改网址
<map:match pattern="solicitarCorreccion/**">

你想要什么。

P.D.- 我忘了添加 SolicitarCorreccionForm 的导入:

import org.dspace.content.DCValue;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.handle.HandleManager;

希望对你有所帮助。

【讨论】:

  • 我成功申请了DS-2099。当我添加dso=HandleManager.resolveToObject(context,handle); 行时,我无法解析符号'dso'。使其成为DSpaceOBject dso,我在(dso instanceof Item) 行中遇到不可转换类型错误,并且在DCValue[] titles= dso.getMetadata("dc", "contributor", "author",null); 中找不到符号错误请告知。谢谢。
  • 我的错,我忘记声明变量“dso”并转换它。代码现已更正。
  • 我可能遗漏了一些导入语句,因为我在feedback.addPara(titles[0]);feedback.addHidden("title").setValue(titles[0]); 中遇到了无法解决方法错误?
【解决方案2】:

试试

  String handle="1234/1234";

  context=new Context(); // Or reuse the Context:

  dso = HandleManager.resolveToObject(context,handle);

  if (dso instanceof Item){

       DCValue[] titles= dso.getMetadata("dc", "contributor", "author",null); 

       // use titles
  }

【讨论】:

  • 你能发布一个解释来配合你的答案吗?
  • 这段代码有点危险,因为它创建了一个 new 上下文(这反过来又创建了一个新的数据库连接)并且从不关闭它。虽然这个概念没问题,但它应该重用当前打开的 Context,或者它应该包括对 context.abort(); 的最终调用以关闭 Context 对象。
  • 你好 Adan,我想我想要实现的与你在这里的工作非常相似:DS-2099,但我想显示标题(和其他元数据)而不是只显示项目句柄) 给用户,并将标题(和其他元数据)传递给该表单的接收者。
  • 我同意@TimDonohue,它只是假装是 HandleManager 的一个功能示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2023-04-08
  • 2012-09-12
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
相关资源
最近更新 更多