jsp:useBean在类中调用特定方法

时间:2014-01-21 12:53:25

标签: java jsp jstl el

如何使用此标记调用类中的特定方法?

<jsp:useBean id="user" scope="??" class="com.example.User" type="com.example.User" />

2 个答案:

答案 0 :(得分:4)

假设您的bean用户有一个名为getName()

的方法
<jsp:useBean id="user" scope="request" class="com.example.User" />
// ...
<h1>Hello <jsp:getProperty name="user" property="name" /></h1>

范围可能不是请求:取决于您想要的内容(会话,页面等)


编辑:你的第二个问题是关于在你的jsp中调用业务方法

事实是,不应该将业务方法调用到JSP中。您的JSP页面应该只显示静态(html等)和动态(例如bean)内容。如果遵循MVC模式,则将业务作业委托给servlet。您的JSP只是简单的视图(读取bean的属性)并且是禁止的(在目录WEB-INF中)。

对于JSP页面,请按以下步骤操作:

  1. html表单的操作是您的servlet控制器(方法POST)
  2. 添加隐藏的输入以帮助servlet识别要执行的操作:<input type="hidden" name="action" value="update" /><input type="hidden" name="action" value="register" />
  3. 您还可以显示动态内容(bean)。为此,您应该考虑使用JSTL。
    示例(servlet在请求范围上发送Movie bean的ArrayList):

    <c:forEach items="${requestScope.results}" var="movie">
       // ${movie.title}
       // etc
    </c:forEach>
    

    对于您的servlet控制器,请按以下步骤操作:

    doPost 方法中(因为我们在html表单中使用POST方法),您可以根据收到的操作调度业务逻辑:request.getParameter("action")

    如果操作是更新,那么我们会执行更新业务逻辑。
    如果action register ,那么我们执行注册业务逻辑。
    等...

    现在,我们可以在请求范围内存储一些数据,以便与jsp页面进行通信:

    ArrayList<Movie> results = new ArrayList<Movie>();
    results.add(new Movie(...));
    // etc...
    request.setAttribute("results", results);
    

    最后,发送数据并显示jsp:

    request.getRequestDispatcher("/WEB-INF/update.jsp").forward(request, response);
    

    web.xml的一个示例(将servlet映射为欢迎文件index.jsp)

    <servlet>
        <servlet-name>Search</servlet-name>
        <servlet-class>Servlets.Search</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>Register</servlet-name>
        <servlet-class>Servlets.Register</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>Update</servlet-name>
        <servlet-class>Servlets.Update</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Search</servlet-name>
        <url-pattern>/index.jsp</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Register</servlet-name>
        <url-pattern>/Register.do</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Update</servlet-name>
        <url-pattern>/Update.do</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    

答案 1 :(得分:0)

<jsp:useBean id="user" scope="request" class="com.example.User" type="com.example.User" />
<jsp:setProperty name="user" property="*" />
<c:set var="saveStatus" value="${user.save()}" />