2011-08-16 5 views
1

Je suis tout à fait nouveau au développement de portlet JSP/Liferay et j'essaie d'ajouter une barre de progression en utilisant jQuery, j'ai trouvé this question mais n'était pas très spécifique à la façon dont cela sera fait en utilisant AJAX.Jquery progression barre de mise en œuvre pour JSP/Liferay

Je me demandais si quelqu'un pouvait me diriger dans la bonne direction pour m'aider à démarrer.

merci.

EDIT:

je JSON simple, et réussi à faire quelques changements mais je reçois une mauvaise demande (code d'erreur 400 lorsque vous utilisez bug d'incendie) et 404 ne se trouvent pas sur mon JS

ci-dessous est mon code:

public void processAction(
     ActionRequest actionRequest, ActionResponse actionResponse) 
    throws IOException, PortletException { 

//some code here 


    this.generateJSON(actionRequest, actionResponse);//manual call the method? 

public void generateJSON(ActionRequest actionRequest, ActionResponse actionResponse) 
    throws IOException, PortletException { 
     try{ 
         //just want to see a progress bar so do static for now... 
      JSONObject obj=new JSONObject(); 
      obj.put("percent",new Integer(30)); 
      StringWriter out = new StringWriter(); 
      obj.writeJSONString(out); 
      String jsonText = out.toString(); 
     }catch(Exception ex){ 
      System.out.print(ex); 
     } 
     } 
    }//end of class 

JS ici

function checkStatus(){ 
    $.ajax({ 
      type: 'POST', 
      //url: '<%=request.getContextPath()%>/checkStatusServlet', 
      url: '<%=request.getContextPath()%>/generateJSON', 
      dataType: 'json', 
      success: function(data) 
      { 
      alert(data.statusPercent); 
      var statusPercent = data.percent; 
      //Update your jQuery progress bar 
      $("#progressbar").progressbar({value: statusPercent}); 

      } 
    }); 
    //below works and alert is being called... 
    /*for (i=0;i<=5;i++) 
    { 
     $("#progressbar").progressbar({value: i+10}); 
    } 
    alert('got here'); 
    */ 
} 

HTML/JSP

<%@ page import="javax.portlet.PortletPreferences" %> 
<portlet:defineObjects/> 
<portlet:renderURL var="resourceUrl"></portlet:renderURL> 
<!-- Javascript files --> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.js"></script> 
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> 
<script type="text/javascript" src="js/main.js"></script> 
<!-- end of Java script files --> 
<script type="text/javascript"> 
    setTimeout('checkStatus()',1000); 
</script> 
<div id="progressbar"></div> 

Répondre

1

La réponse dépend vraiment de vos besoins spécifiques. Essayez-vous d'afficher combien de temps il reste réellement pour une tâche, ou combien de temps avant le chargement d'une page ou quoi?

Vous pouvez interroger à partir du client et mettre à jour la barre de progression dans le navigateur en fonction de la quantité à traiter. Un simple jQuery exemple ajax:

function checkStatus 
{ 
    $.ajax({ 
      type: 'POST', 
      url: '<%=request.getContextPath()%>/checkStatusServlet', 
      dataType: 'json', 
      success: function(data) 
      { 
      var statusPercent = data.statusPercent; 

      //Update your jQuery progress bar 
      $("#progressbar").progressbar({value: statusPercent }); 
      } 
    }); 
} 

Ensuite, vous pouvez simplement interroger cette fonction jusqu'à ce que son fait

setTimeout('checkStatus()' 1000); 

Bien sûr, vous aurez également besoin de construire une action de servlet ou jambes de force ou portlet pour gérer le traitement sur le serveur et renvoyer le statut approprié pour la tâche.

EDIT:

Utilisez le JSON library À partir de votre servlet ou une action. (le code ci-dessous provient de l'action struts2)

+0

Je suis en train d'essayer de déterminer combien de temps il faut pour une tâche particulière. fondamentalement quelque chose comme ceci: http://onjava.com/pub/a/onjava/2003/06/11/jsp_progressbars.html?page=1 malheureusement je ne peux pas le faire fonctionner et semble un peu démodé. Une autre question est de savoir comment je pourrais produire JSON dans JSP? – rax313

+0

J'ai réussi à comprendre l'utilisation de JSON en Java, mais je n'arrive toujours pas à faire fonctionner cela. – rax313

+0

Voir ci-dessus. –

2

Vous ne pouvez pas générer de JSON dans processAction. Cette méthode est destinée à modifier l'état du portlet, mais pas à générer une sortie. Le portail-façon d'accomplir ce dont vous avez besoin pour utiliser la méthode serveResource/lifecycle-phase: vous obtenez l'URL pour cela à partir du portail (< portlet: resourceURL />). Plus précisément, vous ne devriez pas les créer vous-même.

Une alternative (mais pas la méthode de portail) consiste à utiliser une servlet - mais dans ce cas, vous n'avez pas l'état de portlet dont vous pourriez avoir besoin. Et vous pouvez utiliser < portlet: namespace /> pour désambiguïser vos noms globaux - ou utiliser un espace de noms approprié - car vous ne pouvez jamais dire combien de fois votre portlet sera placé sur une page.

(espaces ajoutés à jsp-tags afin qu'ils ne soient pas mangés par les balises)

court: En savoir plus sur les ressources servant à portlets, cela résoudra probablement votre problème sous-jacent: Avec le code que vous donnez ci-dessus, vous ne pourrez pas accéder à votre JSON - quoi que vous fassiez du côté JS.

+0

je veux, mais pour l'instant je viens d'utiliser un langguage différent ASP.NET/C#. Je vais apprendre cela. Merci a tous. – rax313

+1

wow - c'est une alternative ... –

+0

parfois vous avez juste à renoncer à l'idéalisme et "juste le faire" – rax313