当前位置: 首页 > 知识库问答 >
问题:

jsp:UseBean与Struts标记

江烨伟
2023-03-14

我正在学习Struts2,但我并不完全清楚如何以及何时使用标签

我发现一篇文章概述了这些差异,但没有提供任何示例。

http://struts.apache.org/development/1.x/struts-taglib/tlddoc/bean/define.html

<代码>

  • 无条件地在指定标识符下创建(或替换)bean
  • 可以使用不同bean的属性getter返回的值创建bean(包括使用嵌套和/或索引属性名称引用的属性)
  • 可以创建一个bean,其内容是value属性指定的文本字符串(或运行时表达式的结果)
  • 不支持仅在实际创建bean时才执行的嵌套内容(如jsp:setProperty标记)

下面是我使用UseBean标记的快速测试代码。谁能给我举个例子,说明我应该如何/为什么(或是否)使用Struts bean:。。。显示中的标签。而是jsp?

索引。jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>

        <form name="input" action="TestServlet" method="post">
            <input type="text" name="txtFirstName" placeholder="First Name">
            <input type="text" name="txtLastName" placeholder="Last Name">
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>

TestServlet。java

    package com.website.servlets;

    import java.io.IOException;

    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.website.models.Person;

    /**
     * Servlet implementation class TestServlet
     */
    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public TestServlet() {
            super();
        }


        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            String fname = request.getParameter("txtFirstName");
            String lname = request.getParameter("txtLastName");
            
            Person p = new Person();        
            
            p.setFirstName(fname);
            p.setLastName(lname);
            
            request.setAttribute("myPersonObj", p);
            
            RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
            rd.forward(request, response);      
        }

    }

display.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
                    
        <jsp:useBean id="myPersonObj" class="com.website.models.Person" scope="request"></jsp:useBean>
        
        <p> 
            Full Name : <jsp:getProperty property="firstName" name="myPersonObj"/>
                        <jsp:getProperty property="lastName" name="myPersonObj"/>
        </p>
        
    </body>
    </html>

共有2个答案

狄心水
2023-03-14

你应该使用struts2标签,它们支持OGNL。OGNL有一个上下文和一个作为根对象的值堆栈。因此,您的请求范围对象显示为

<p> 
    Full Name : <s:property value="#request.myPersonObj.firstName"/>&nbsp;
                <s:property value="#request.myPersonObj.lastName"/>
</p>

要更好地理解OGNL概念,请参阅文档。

柯河
2023-03-14

因为您实际上是在servlet中创建bean,并将其放在请求属性中,所以您可以替换:

    <jsp:useBean id="myPersonObj" class="com.website.models.Person" scope="request"></jsp:useBean>

    <p> 
        Full Name : <jsp:getProperty property="firstName" name="myPersonObj"/>
                    <jsp:getProperty property="lastName" name="myPersonObj"/>
    </p>

与(使用EL):

    <p> 
        Full Name : ${myPersonObj.firstName}
                    ${myPersonObj.lastName}
    </p>

请参阅SO上的Servlet信息页面:

不要使用

因为

 类似资料:
  • <jsp:useBean>标签用于在指定的范围(pageContext、request、session和application)中查找一个指定名称的Java对象,如果在指定的范围存在该对象,则<jsp:userBean>标签直接返回该对象的引用,否则创建一个新的对象,并将这个新对象存储在指定的范围。 <jsp:useBean>标签的id属性用来指定对象名,class属性用来指定要查找或创建的对象所

  • 本文向大家介绍Java的Struts框架中append标签与generator标签的使用,包括了Java的Struts框架中append标签与generator标签的使用的使用技巧和注意事项,需要的朋友参考一下 append 标签: 这些append标签需要两个或两个以上的列表作为参数,并追加它们放在一起,如下图所示: 如果有两个列表A和B的值A1,A2和B1,B2。合并列表,会给你的A1,A2,

  • Struts Plus, Struts + 项目, 计划包含极速表单验证框架, 权限管理等子模块. 目前主要关注于 Struts 2 方面的生产力提高项目, 主要基于注解方式进行增强, 并提供抽象层, 使项目仅仅依赖于 Struts 本身, 而不需要强制您使用某种业务层和数据层框架.

  • 我可以在Struts2中的s:property标记中使用s:text标记吗。问题是,我的操作类中有一个 映射以的形式具有键/值,实际上映射中存在的值是文件中存在的键。请参阅下面的 这是我的application.properties文件 现在,我想在我的jsp中迭代这个映射,并希望通过在application.properties文件中将映射的值作为键传递,从属性文件中获得这些值,并将它们显示为标

  • 当我将自动拦截器(interceptor-ref name=“autowiring”)放入spring.xml中的action标记时,index.jsp中的struts标记无法与该action类的setter映射。当我从action标记中删除自动标记时,在这种情况下,jsp的struts标记能够与action类的setter映射。 任何来自你方面的帮助都是非常受欢迎的。如果你需要任何类型的例子,然