让修改后的ItemRequestForm.java在DSpace 6x版中工作。

问题描述 投票:1回答:1

我有一个修改版的 ItemRequestForm.java 之前在5x版本中工作的。在 item-view.xsl我创建了一个链接,当用户点击时,将重定向到这个修改后的表单。这个链接的URL模式是 http://example.com/documentdelivery/123456789/1234. 当我将DSpace版本升级到6x时,我很难让它工作。由于5和6版本之间的重大代码重构,我发现很难将我的代码迁移到最新版本。

以下是在5x版本中可以使用的部分代码。 (DocumentDeliveryForm.java)

代码主要是基于这个答案。如何从DSpace的反馈页面修改版中获取引用页面(项目)的标题?

    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = HandleManager.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

当我升级到第6版时,我发现 DSpaceObject dso = HandleManager.resolveToObject(context, handle) 不再工作,所以我用 DSpaceObject dso = handleService.resolveToObject(context, handle).

下面是我尝试将我的5x代码迁移到6x的尝试 (结果:java.lang.NullPointerException)

    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");

下面是另一个尝试,结果是Handle为null。

    Request request = ObjectModelHelper.getRequest(objectModel);
    String handle = request.getParameter("handle");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

在java stacktrace中,它指向了这行代码。DSpaceObject dso = handleService.resolveToObject(context, handle). 看来 处理 没有被加载。

我应该修改我的哪部分代码,以便成功地将用户重定向到 http://example.com/documentdelivery/123456789/1234http://example.com/handle/123456789/1234?

哪种结构的项目查看器划分是正确的?

    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");

OR

    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");

先谢谢你。

java dspace
1个回答
1
投票

最后,我成功地让它工作了。我还根据我之前的帖子显示了其他元数据字段。在DSpace 6x中获取ItemRequestForm中的其他元数据。

public void addBody(Body body) throws SAXException, WingException,
        UIException, SQLException, IOException, AuthorizeException
{
    Request request = ObjectModelHelper.getRequest(objectModel);

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("documentdelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle", "unknown"),Division.METHOD_POST,"primary");

    documentdelivery.setHead(T_head);

    String handle = parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    Item item = (Item) dso;

    String citationDC = itemService.getMetadataFirstValue(item, "dc", "identifier", "citation", org.dspace.content.Item.ANY);
    String titleDC = item.getName();
    String title = "";
    if (citationDC != null && citationDC.length() > 0) {
        title = citationDC;
    } else {
        if (titleDC != null && titleDC.length() > 0)
            title = titleDC;
    }
    documentdelivery.addPara(title);

我还添加了必要的导入。

import org.dspace.content.service.ItemService;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.handle.service.HandleService;

我还加了这些:

    private final transient ItemService itemService = ContentServiceFactory.getInstance().getItemService();
    private final transient HandleService handleService = HandleServiceFactory.getInstance().getHandleService();
© www.soinside.com 2019 - 2024. All rights reserved.