以前はバージョン5xで機能していた_ItemRequestForm.Java
_の変更バージョンがあります。 _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");
_
以下は、ハンドルが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");
_
前もって感謝します。
最後に、なんとかそれを機能させることができました。ここにも以前の投稿に基づいて他のメタデータフィールドを表示しました 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();