2010-10-16 3 views
1

Je dois obtenir 2 nombres et une opération à partir d'un fichier jsp, en utilisant un bean java. Après avoir soumis les nombres, apportez-les à une servlet de ce Java Bean et renvoyez-en un résultat. Le problème est que les champs de beans java ne sont jamais complétés avec les nombres écrits dans des zones de texte. Alors, je l'ai, le corps de index.jsp:Javabeans avec jsp: useBean. Comment travaillent-ils? Je ne comprends pas

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body> 
    <h1>Calculator</h1> 
    <FORM METHOD="POST" action="Controller"> 
     N1: <input type ="text" name="nr1" value="0"> 
     op: <input type ="text" name="op" value="+"> 
     N2: <input type ="text" name="nr2" value="0"> 
     <INPUT class ="button" TYPE="submit" NAME="actiune" VALUE="Calculate"/> 
    </FORM> 
    <jsp:useBean id="binOp" class="beans.BinaryOperation" scope="session"/> 
    <jsp:setProperty name="binOp" property="*"/> 
</body> 

La méthode de servlet processRequest, Controller.java, placé dans le paquet servlets:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    HttpSession session = request.getSession(true); 
    BinaryOperation binOp = (BinaryOperation) session.getAttribute("binOp"); 

    try { 
     if (!binOp.isComplete()) { 
      System.out.println(binOp.getNr1() + binOp.getNr2() + binOp.getOp()); 
      response.sendRedirect("index.jsp"); 
     } else { 
      out.println("<html>"); 
      out.println("<head>"); 
      out.println("<title>Servlet Controller</title>"); 
      out.println("</head>"); 
      out.println("<body>"); 
      out.println("<h1>Bean in controller " + binOp.getNr1() + "__" + binOp.getOp() + "__" + binOp.getNr2() + "</h1>"); 
      out.println(binOp.toString()); 
      out.println("</body>"); 
      out.println("</html>"); 
     } 



    } finally { 
     out.close(); 
    } 
} 

et le haricot, BinaryOperation, placé dans les paquets de haricots:

package beans; 


public class BinaryOperation { 

private String nr1; 
private String op; 
private String nr2; 

public void setNr1(String nr1) { 
    this.nr1 = nr1; 
} 

public void setOp(String op) { 
    this.op = op; 
} 

public void setNr2(String nr2) { 
    this.nr2 = nr2; 
} 

public String getNr1() { 
    return nr1; 
} 

public String getOp() { 
    return op; 
} 

public String getNr2() { 
    return nr2; 
} 

public boolean isComplete() { 
    return !(((nr1 == null) || (nr1.length() == 0)) 
      || ((op == null) || (op.length() == 0)) 
      || ((nr2 == null) || (nr2.length() == 0))); 
} 
} 

Dans le journal Apache je n'ai pas sortie t de l'instruction if (voir le servlet - System.out.println (binOp.getNr1() + binOp.getNr2() + binOp.getOp());): nullnullnull

Où est mon erreur?

+0

Lorsque vous avez consigné les valeurs dans le servlet, juste avant le mot-clé 'try', les valeurs étaient-elles définies? Autrement dit, pouvez-vous vérifier que les valeurs que vous entrez sont en train de se rendre à la servlet? En général, je ne fais que ces choses dans l'objet de requête. –

+0

Pouvez-vous m'expliquer comment la valeur dans '' entre dans le bean? –

+0

@Tony Ennis: Comme vous pouvez le voir, j'essaie de prendre le bean de la session de la demande. – m88

Répondre

0

je l'ai a fait un fichier plus jsp entre index.jsp et Servlet:

<jsp:useBean id="binOp" class="beans.BinaryOperation" scope="session"/> 
<jsp:setProperty name="binOp" property="*"/>. 

Ce fait la "magie".

+0

@BalusC dans un sens, vous aviez raison. – m88

+0

Ma réponse a résolu le problème. Votre réponse était très bonne, mais n'a pas résolu le problème. Je suis désolé. – m88

+0

Vous ne devriez pas être en colère à cause de cela, et indiquez ma réponse. – m88

0

Le bean est seulement une classe Java pour hodling properites avec getters et setters. Il n'a pas de propriétés magiques et ne se remplit pas. C'est juste un type d'objet, comme un motif. C'est comme ça qu'ils travaillent. Vous devez remplir manuellement les propriétés souhaitées avec la méthode setSmth appropriée.

+0

Comment obtenir les valeurs des zones de texte? Et les mettre dans le haricot? – m88

+0

Pouvez-vous nous dire ce que font son jsp '

+0

Ils ne font rien dans ce cas évidemment :) Je suis juste en train de répondre au titre de la question. Je n'ai pas le temps de parcourir tout le code. Pardon. –