重用JSP代码

时间:2014-12-11 19:03:01

标签: java jsp

我有很多包含代码的JSP,这些代码具有可以像这些select语句,输入等一样重用的语句。

以下是JSP

的示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
(needed includes)
<%
  ArrayList<Student> studentList = (from database)
%>
<html>
  <head>
    <title>Students</title>
  </head>
  <body>
    <form>
      (other inputs)
      ...
      <select class="combobox">
        <%for (Student studentObj:studentList) { %>
          <option value="<%=studentObj.getId()">
            <%=studentObj.getLastName() %>, <%=studentObj.getFirstName() %>
          </option>
        <%} %>
      </select>
      ...
      (other inputs)
    </form>
  </body>
</html>

我所做的是做一个如下功能。这允许我能够传递一个对象参数并获取html代码。

public static getStudentSelect(ArrayList<Student> studentList) {
    String htmlCode = "<select class=\"combobox\">";
    for (Student studentObj:studentList) {  
        htmlCode += "<option value=\"" + studentObj.getId() + "\">" +
        studentObj.getLastName() + ", " + studentObj.getFirstName() +
        "</option>";
    }
    htmlCode += "</select>"
    return htmlCode;
}

有更好的方法吗?因为转义报价会变得混乱。

我无法通过jsp包含发送对象。

我在考虑使用Gagawa

2 个答案:

答案 0 :(得分:3)

don't use scriptlets in JSP。您应该使用标记文件,JSTL和EL来创建自己的标记库。这样,您可以轻松地将变量作为参数传递到可重用组件中,这与JSP片段不同,当您处理简单逻辑(如循环或创建表)时,这些变量比编写自定义标记简单得多。

以下是基于问题中示例JSP代码的示例。

/WEB-INF/tags/student/select.tag

<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
<%@ attribute name="studentList" required="true" type="java.util.List" %>

<select class="combobox">
  <c:forEach var="student" items="${studentList}">
    <option value="${student.id}">
      <c:out value="${student.lastName}" />,
      <c:out value="${student.firstName}" />
    </option>
  </c:forEach>
</select>

sample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix=”student” tagdir=”/WEB-INF/tags/student” %>

<!DOCTYPE html>
<html>
  <head>
    <title>Students</title>
  </head>
  <body>
    <form>
      (other inputs)
      ...
      <student:select studentList="${sessionScope.studentList}" />
      ...
      (other inputs)
    </form>
  </body>
</html>

答案 1 :(得分:0)

避免逃避问题。 最好尝试使用普通的javascript来创建像

这样的html
  var el = document.createElement('select');
  el.className = "combobox";
  for (Student studentObj:studentList) { 
     var optel = document.createElement('option');
     optel.value = studentObj.getId();
     optel.text = studentObj.getLastName() + ", " + studentObj.getFirstName();
     el.append(optel);
   }
   return el;