У меня есть измененная версия 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, он указывает на следующую строку кода: DSpaceObject dso = handleService.resolveToObject(context, handle)
. Кажется, что значение для handle не загружается.
Какую часть моего кода я должен изменить, чтобы я мог успешно перенаправить пользователей на http://example.com/documentdelivery/123456789/1234
с http://example.com/handle/123456789/1234
?
Какая конструкция деления средства просмотра предметов правильная?
Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");
ИЛИ
Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");
Заранее спасибо.