2014-09-26 50 views
0

如何才能从反馈页面的修改版本中获取项目的标题,就像在jspui中的“推荐此项目”一样?我也希望能够生成页面的结果url为http://example.com/feedback?handle=123456789/123。我在我以前的文章中从comment问了这个,但我不知道如何使用HandleManager。我已经使用itemRequestForm的部分代码尝试了很多次,但我总是得到空指针错误。如何从DSpace中反馈页面的修改版本获取引荐页面(项目)的标题?

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中查找,但现在我无法找出我缺少的东西。

+0

哪行代码给你一个NullPointerException?一目了然,代码看起来足够合理,但它已经脱离了上下文,因此很难确定哪一行(或多行)不能正常工作。 – 2014-09-29 14:10:56

+0

另外,你在修改什么课程?上面借用的代码看起来是一个“Action”类(扩展了“AbstractAction”类),例如[SendItemRequestAction](https://github.com/DSpace/DSpace/blob/master/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/SendItemRequestAction.java#L97)。如果您试图修改[FeedbackForm](https://github.com/DSpace/DSpace/blob/master/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/FeedbackForm 。java),这段代码不会像“objectModel”Map不存在一样工作。 – 2014-09-29 14:17:41

+0

忽略我之前的评论..我现在注意到Fee​​dbackForm扩展了[AbstractDSpaceTransformer](https://github.com/DSpace/DSpace/blob/master/dspace-xmlui/src/main/java/org/dspace/app/xmlui /cocoon/AbstractDSpaceTransformer.java),它定义了“objectModel”映射。所以,你*应该*能够在FeedbackForm中使用这段代码。可能我们只需要更多关于NullPointerException发生的信息。 – 2014-09-29 14:28:58

回答

0

您可以在获得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); 

而在方面/ ViewArtifacts/sitemap .xmap您应该设置参数:

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

获取在SendSolicitarCorreccionAction和发送电子邮件,将参数添加到像邮件:

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

你喜欢对子级的URL从

改变
<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; 

我希望这帮助。

+0

我成功应用了DS-2099。当我添加'dso = HandleManager.resolveToObject(context,handle)'这一行时,我得不到符号'dso'。使它成为'DSpaceOBject dso',我在'(dso instanceof Item)'行中得到了不可转换的类型错误,并且无法在DCValue [] titles = dso.getMetadata(“dc”,“contributor”,“author” null);'请指教。谢谢。 – euler 2014-10-01 14:44:16

+0

我的错,我忘了声明变量“dso”并施放它。代码现在已被更正。 – 2014-10-01 14:54:55

+0

我可能会缺少一些导入语句,因为我无法解决'feedback.addPara(titles [0]);'和'feedback.addHidden(“title”)。setValue(titles [0]);'? – euler 2014-10-01 15:55:04

0

尝试

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 
    } 
+0

你能发表一个解释以配合你的答案吗? – kingdamian42 2014-09-29 15:22:02

+1

这段代码有点危险,因为它创建了一个* new * Context(它反过来创建了一个新的数据库连接)并且从不关闭它。尽管这个概念没有问题,但它应该重新使用当前打开的Context,或者应该包含对'context.abort();'的最终调用,以关闭Context对象。 – 2014-09-29 21:48:02

+0

你好阿丹,我想我想实现的是非常类似于你在这里工作的:[DS-2099](https://jira.duraspace.org/browse/DS-2099),而不是只显示物品处理,我想向用户显示标题(和其他元数据),并将标题(和其他元数据)传递给该表单的收件人。 – euler 2014-09-30 01:23:20

相关问题