【问题标题】:Javabeans with jsp:useBean. How do they work? I don't understand带有 jsp:useBean 的 Javabean。它们是如何工作的?我不明白
【发布时间】:2010-10-16 22:06:01
【问题描述】:

我必须使用 java bean 从 jsp 文件中获取 2 个数字和一个操作。提交数字后,将它们从该 Java Bean 带到一个 servlet 并返回它们的结果。问题是 java bean 字段永远不会用文本框中的数字完成。 所以,我有了 index.jsp 的主体:

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

servlet的processRequest方法,Controller.java,放在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();
    }
}

还有 bean,BinaryOperation,放在包 bean 中:

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 日志中,我有 if 语句的下一个输出(参见 servlet - System.out.println(binOp.getNr1() + binOp.getNr2() + binOp.getOp());): nullnullnull

我的错误在哪里?

【问题讨论】:

  • 当您在 servlet 中记录值时,就在 try 关键字之前,是否设置了值?也就是说,您能否验证您输入的值是否正在进入 servlet?顺便说一下,我一般把这些东西放在 Request 对象中。
  • 你能解释一下&lt;input type ="text" name="nr1" value="0"&gt;中的值是如何进入bean的吗?
  • @Tony Ennis:如您所见,我尝试从请求的会话中获取 bean。
  • @Tony Ennis:第二个问题,我认为使用这个:,将完成 bean、字段。

标签: java jsp servlets javabeans


【解决方案1】:

bean 只是一个 Java 类,用于使用 getter 和 setter 来保存属性。它没有任何魔法属性,也不会填充自己。它只是一种对象,就像一个模式。这就是他们的工作方式。您必须使用适当的 setSmth 方法手动填充所需的属性。

【讨论】:

  • 如何从文本框中获取值?并将它们放入 bean 中?
  • 你能告诉我们他的jsp的&lt;jsp:useBean ...&lt;jsp:setProperty...是做什么的吗?
  • 在这种情况下他们显然什么都不做:)我只是在回答问题的标题。我没有时间浏览所有代码。对不起。
【解决方案2】:

我在 index.jsp 和 Servlet 之间又做了一个 jsp 文件:

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

这发挥了“魔力”。

【讨论】:

  • 我的回答解决了这个问题。你的回答很好,但没有解决问题。对不起。
  • 你不应该因此而生气,对我的回答不予评价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多