我的JSP页面上的${}失效了。如何才能让我的${}html标签重新工作?[重复]

问题描述 投票:0回答:1

封闭

29天前

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

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html >
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>


    <c:forEach items="${students}" var="s" >
         ${s} <br>

    </c:forEach>



</body>
</html>
package com.Demo;

public class Student {
    int rollno;
    String name;


    @Override
    public String toString() {
        return "Student [rollno=" + rollno + ", name=" + name + "]";
    }


    public int getRollno() {
        return rollno;
    }


    public void setRollno(int rollno) {
        this.rollno = rollno;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public Student(int rollno, String name) {
        super();
        this.rollno = rollno;
        this.name = name;
    }


}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>JSTLexample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>
package com.Demo;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

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;

@WebServlet("/DemoServlet")
public class DemoServlet extends HttpServlet{

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

        //String name = "Navin";

        List <Student> studs = Arrays.asList(new Student(1, "brandon"), new Student(2, "Micheal"), new Student (3, "Charles"));

        request.setAttribute("students", studs);

        RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
        rd.forward(request, response);

    }
}

.
java eclipse tags jstl
1个回答
-1
投票

所以${}确实能用。但我使用的 JSTL jar 文件却让 ${} 无法正常工作了。这些是我的JSTL jar文件:jstl-1.2 (1).jar, jstl-impl-1.2.jar, jstl-standard.jar。我是按照Navin教程上的Servlet &JSP教程commonslib文件夹里有server.xml(显然不是)或你的应用程序的WEB-INFlib。然后调用你希望使用的每个标签前缀的名称在你的JSP页面的顶部声明。Tomcat有几种实现的方法。

另外,你的doctype应该是

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Yout .tld标签库描述符应该在WEB-INF文件夹中。

在你的web.xml文件中定义taglib的位置。

    <jsp-config>
<taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
        <taglib-location>/WEB-INF/c.tld</taglib-location>
        </taglib>
    </jsp-config>

另外,你的bean类应该在web.xml中声明,在顶部的页面中也要声明调用它的页面声明。

还不错的一点是,如果出了问题,可以重新检查上面的内容。

你所做的servlet是一个 GET请求 servlet,它们通过以下方式在URL上传递参数

? "name=**valuOFthisPart&anid=**somethinHere&terminus=。

如果您使用${Param.student}作为学生添加到网址上的"? "后面,可能会对EL有用,就像这样。

**?学生=name=**valuOFthisPart&next1=somethinHere&next2=somethinHere&terminus=。

POST servlet不能携带参数 上的URL,并且是你想要做的代码,所以是什么 request.setAttribute的设置是为POST请求而做的(POST请求确实携带标记)。

而且,request对象的setAttribute可以通过其类的接口来实现,也可以通过包装子类在类级进行设置,如next的

javax.servlet.ServletRequestWrapper requestWrpp = new javax.servlet.ServletRequestWrapper(request);
requestWrpp.setAttribute("students", studs);

不过,虽然更多的现代版本的web容器可以识别复杂的类型,如List和Map(但可能不包括学生类),你可能可以通过以下方式使用那里的代码 我依稀记得我记得在JSP处理中使用复杂对象的条款是,它被理解为可转换为字符串.Student是无法识别的Web应用程序解析器规则,但是如果你写Student扩展(Map int,String),那么运行时和编译器可能能够使用该设置里面作为一个(Map K,V)。 实际上,这是不可能的,因为你在JSP处理之前尝试在servlet中通过响应[ !!除非Student类只是个 薮猫支持类 在classes文件夹中。(不是 豆瓣语法类)见下一段]。

你试图用bean的方式来使用一个类,而且bean必须在web.xml和页面中声明,并且servlet也必须用classes或classesbeans文件夹中的学生对象引用来通知!!!!!。 如果它是一个bean,它应该在bean文件夹中(如果它不是一个bean,只是一个支持处理类,应该在classes中与servlet打包或不打包),并由JSP解析器中的响应调用,但正确加载,正确更新的当前实例,它在Web应用程序的用户会话中应该被使用(JSF更容易做到这一点)。你可以通过获取web app上下文和初始实例线程来获取当前session和servlet实例使用的bean,找到你想要的bean,它的当前实例和当前状态(要求是session bean,除非值是常数,或者它只通过set get处理即时输出)来获取它的当前值。 Bean类必须在整个app配置中声明,与servlet无异,但不同的是有严格的运行时和语法的声明规则。

最后说明

// the first argument should be a string NOT an int
req.setAttribute("String Object",(java.lang.Object)anObject);

/注意:该对象必须是可识别的java语言核心类转换为String !!!

关于post请求,我只想说一下,其实它可以携带一个查询字符串,但在Java框架内被认为是一个奇怪的动作。

© www.soinside.com 2019 - 2024. All rights reserved.