【发布时间】:2015-09-19 17:46:19
【问题描述】:
我正在寻找一种使用 jstl 填充下拉列表的方法。我需要在页面加载时执行此操作。我尝试了一些代码。但它不起作用。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<select>
<c:forEach items="${requestScope.personList}" var="person">
<option value="${person.getId()}">${person.getName()}
</option>
</c:forEach>
</select>
这是我的控制器 servlet 代码。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try {
CasualLeaveService service1 = new CasualLeaveServiceImpl();
List<Person> personList = service1.searchName();
request.setAttribute("personList", personList);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/casual");
rd.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
这是我的服务器类代码。
public List<Person> searchName() {
List<Person> list = null;
try (DaoSession session = DaoSessionFactory.createSession()) {
EmployeeDao emp = session.getEmployeeDao();
list = emp.findAllPersons();
if (!list.isEmpty()) {
System.out.println("My list is :"+list);
} else {
System.out.println("Error in list");
}
}
return list;
}
我的人物类
public class Person {
private int id;
private String employeeNo;
private String name;
@ValidNo(message = "Must be a number between 1 to 999")
private Integer epfNo;
public Person() {
}
/**
*
* @param id
* @param employeeNo
* @param name initials + surname
* @param epfNo
*/
public Person(int id, String employeeNo, String name, Integer epfNo) {
this.id = id;
this.employeeNo = employeeNo;
this.name = name;
this.epfNo = epfNo;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmployeeNo() {
return employeeNo;
}
public void setEmployeeNo(String employeeNo) {
this.employeeNo = employeeNo;
}
/**
*
* @return initials + surname
*/
public String getName() {
return name;
}
/**
*
* @param name initials + surname
*/
public void setName(String name) {
this.name = name;
}
public Integer getEpfNo() {
return epfNo;
}
public void setEpfNo(Integer epfNo) {
this.epfNo = epfNo;
}
@Override
public int hashCode() {
int hash = 7;
hash = 67 * hash + this.id;
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
return this.id == other.id;
}
}
我的 Web.xml 是这样映射的。
<servlet>
<jsp-file>/WEB-INF/views/leave/CasualLeave.jsp</jsp-file>
<servlet-name>casualLeave</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>casualLeave</servlet-name>
<url-pattern>/casual</url-pattern>
</servlet-mapping>
我可以保证服务类运行良好。因为我只是把这个服务类方法直接调用到jsp,输出就完美了。问题是使用 jstl 这种方法不起作用。
你能告诉我什么是错误。因为我不喜欢在 jsp html 代码中使用 scriptlet 标记。我听说这是不好的做法。
谢谢。
【问题讨论】:
-
您是否收到任何错误,或者只是没有呈现
<option>?无论如何,我会先使用<option value="${person.id}">${person.name}</option>(而不是getId()和getName())。 -
@JozefChocholacek 仍然没有输出。我怀疑jstl在页面加载事件中不起作用
标签: jsp servlets model-view-controller jstl