Je dois retourner une chaîne sur la méthode de succès. Voici mon code AJAX dans la page jsp.Comment retourner un objet en réponse en utilisant ajax dans le portlet liferay?
<portlet:actionURL name="filterDocuments" var="filterDocuments">
<portlet:param name="action" value="filterDocuments"/>
</portlet:actionURL>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=filterDocuments%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
Et voici mon gestionnaire sur le côté backend.
@ActionMapping(params = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
Et en résultat, il me montre une chaîne vide dans le message d'alerte. Comment faire avec?
MISE À JOUR j'ai changé la méthode de contrôleur pour
@ResourceMapping(value = "filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
Et url à mon jsp est
<portlet:resourceURL var="ajaxResourceURL"/>
<script type="application/javascript">
var filterDto = {
page: 0,
tags: {},
search: null
};
$.ajax({
type: "POST",
url: "<%=ajaxResourceURL%>",
data: filterDto,
success: function (msg) {
alert(msg);
}
});
</script>
Et maintenant, il me donne une exception
org.springframework. web.portlet.NoHandlerFoundException: Aucun gestionnaire trouvé pour demande de portlet: mode 'vue', la phase 'RESOURCE_PHASE', Paramètres de la carte [ 'search' -> array [ ''], 'page' -> array [ '0']]
classe contrôleur pleine
@Controller
@RequestMapping("VIEW")
@Log4j
public class SpringMVCController extends MVCPortlet {
@RenderMapping
public String view(RenderRequest request, RenderResponse response) {
String view = PropertiesConfig.getAsString("views", request);
return view;
}
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
try {
PrintWriter writer = resourceResponse.getWriter();
writer.write("text");
writer.flush();
writer.close();
CaptchaUtil.serveImage(resourceRequest, resourceResponse);
} catch (Exception e) {
log.error(e.getMessage());
}
}
@ResourceMapping(value = "action=filterDocuments")
public void filterDocuments(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException {
PrintWriter writer = PortalUtil.getHttpServletResponse(actionResponse).getWriter();
writer.write("text");
writer.flush();
writer.close();
}
}
Le problème avec votre code est que vous appelez 'actionURL' en utilisant AJAX, ce qui est un motif valable. –
Modifiez votre 'portlet: actionURL' en' portlet: resourceURL' et '@ ActionMapping' en' @ ResourceMapping'. –
Copie possible de [répondre à la requête http avec l'objet json dans le portlet] (https://stackoverflow.com/questions/17592144/respond-to-http-request-with-json-object-in-portlet) –