J'ai une version modifiée de ItemRequestForm.java
qui fonctionnaient auparavant dans la version 5x. Dans item-view.xsl
J'ai créé un lien qui, lorsqu'il est cliqué, redirige l'utilisateur vers ce formulaire modifié. Le modèle d'URL de ce lien est http://example.com/documentdelivery/123456789/1234
. Lorsque je mets à niveau ma version de DSpace vers 6x, j'ai des difficultés à la faire fonctionner. En raison d'une refonte majeure du code entre les versions 5 et 6, j'ai du mal à faire migrer mon code vers la dernière version.
Voici une partie du code qui a fonctionné dans la version 5x ( DocumentDeliveryForm.java )
Le code est principalement basé sur cette réponse : Comment puis-je obtenir le titre de la page de référence (élément) à partir d'une version modifiée de la page de rétroaction dans 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");
Lorsque j'ai fait la mise à jour vers la version 6, j'ai découvert que DSpaceObject dso = HandleManager.resolveToObject(context, handle)
ne fonctionnait plus, je l'ai donc remplacé par DSpaceObject dso = handleService.resolveToObject(context, handle)
.
Voici ma tentative de migrer mon code 5x vers 6x (Résultat : 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");
Voici une autre tentative qui a abouti à Handle is 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");
En regardant la trace de la pile java, elle pointe vers cette ligne de code : DSpaceObject dso = handleService.resolveToObject(context, handle)
. Il semble que la valeur de poignée n'est pas chargé.
Quelle partie de mon code dois-je modifier pour que je puisse rediriger avec succès les utilisateurs vers http://example.com/documentdelivery/123456789/1234
de http://example.com/handle/123456789/1234
?
Quelle construction de la division du visualisateur d'articles est correcte ?
Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");
OU
Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");
Merci d'avance.