2010-10-16 2 views
1

Мне нужно получить 2 номера и операцию из файла jsp, используя java bean. После отправки чисел, переведите их в сервлет из этого Java-компонента и верните результат из них. Проблема в том, что поля java bean никогда не заполняются цифрами, написанными в текстовых окнах. Итак, у меня есть, тело index.jsp в:Javabeans с jsp: useBean. Как они работают? Я не понимаю

<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> 

метод сервлета ProcessRequest, Controller.java, помещенный в пакет сервлетов:

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(); 
    } 
} 

И фасоль, BinaryOperation, помещенный в упаковке фасоли:

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))); 
} 
} 

В журнале Apache у меня есть nex т выход из, если заявление (см сервлет - System.out.println (binOp.getNr1() + binOp.getNr2() + binOp.getOp());): nullnullnull

Где моя ошибка?

+0

Когда вы регистрировали значения в сервлет, прямо перед ключевым словом 'try', были ли установлены значения? То есть, можете ли вы проверить, какие введенные значения попадают в сервлет? Я вообще, но эти вещи в объекте Request, кстати. –

+0

Можете ли вы объяснить мне, как значение в '' попадает в bean-компонент? –

+0

@Tony Ennis: Как вы можете видеть, я пытаюсь взять компонент из сеанса запроса. – m88

ответ

0

Я сделал еще один файл JSP между index.jsp и Servlet:

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

Это сделал "магию".

+0

@BalusC одним способом вы были правы. – m88

+0

Мой ответ разрешил проблему. Ваш ответ был очень хорошим, но не решил проблему. Я прошу прощения. – m88

+0

Вы не должны сердиться из-за этого и отменить мой ответ. – m88

0

Боб является только классом Java для правителей hodling с геттерами и сеттерами. Он не обладает магическими свойствами и не заполняется. Это просто тип объекта, как шаблон. Вот как они работают. Вы должны вручную заполнить нужные свойства с помощью метода setSmth appopriate.

+0

Как получить значения из текстовых полей? И установите их в фасоль? – m88

+0

Можете ли вы рассказать нам, что делает его '' jsp: useBean ... 'и'

+0

Они ничего не делают в этом случае, очевидно :) Я просто отвечаю на название вопроса. У меня нет времени, чтобы пройти весь код. Сожалею. –

Смежные вопросы