【发布时间】:2015-12-17 10:30:48
【问题描述】:
我的基本问题是关于 JavaEE、JSP 和 JSTL,如何获取用户更新的信息来更新控制器端的 bean(即在 serlvet 中)?
我对 Web 应用程序相当陌生,并且我已经阅读了几种不同的方法,但我觉得我的方法确实过时了,或者有一些我忽略的重大缺陷。我的解决方案如下:
我的特定 bean 是一个具有 taskID、标题和说明属性的任务 bean。它实际上还有更多属性,但为了这个问题,我将其缩小了。
public class Task {
private int taskID;
private String title;
private String instructions;
constructor here...
getters and setters defined here...
在 servlet 中,我从 DAO 获取 bean 并将其放入请求中:
Task task = dao.getTaskByID(taskID);
request.setAttribute("task", task);
在 JSP 页面中,我为 bean 属性设置了相应的输入,使用了 taskID 的隐藏输入。用户查看数据,对其进行更改并提交:
<form action="./UpdateTask" method="POST">
<input type="hidden" name="taskID" value="${task.taskID }">
<input type="text" id="taskTitle" name="taskTitle" value="${task.title }">
<input type="text" id="taskInstructions" name="taskInstructions" value="${task.instructions}">
<button type="submit">Submit</button>
</form>
回到控制器,我从请求中获取所有参数并使用更新的数据构建一个 bean,然后将其发送回 DAO 以在数据库中更新。
int taskID = Integer.parseInt(request.getParameter("taskID));
String title = request.getParameter("taskTitle");
String instructions = request.getParameter("taskInstructions");
Task updatedTask = new Task(taskID, title, instructions);
dao.updateTaskInfo(updatedTask );
有几个具体问题:
- 我是否误解了 JSTL 和 bean 是如何一起使用的?
- 有没有办法只从请求中获取整个 bean 而不必像我一样重建它?
- 如果我最终从请求数据重建 bean,如果我不想向用户公开某些属性值(例如外键 ID)怎么办?
我知道询问最佳做法是不受欢迎的,所以我并不是在要求“最佳”方式,而只是要求我所描述的是一种偏离标准做法的非正统方式。或者,如果有什么我没有做的事情会让它变得更简单,或者更符合当前的做法。
我还考虑将任务 bean 设为会话变量以维护对象的状态,然后在请求后从会话中取回它并更新可能根据用户输入更改的字段,但我担心并发问题用这种方法。
感谢您的帮助。 SO在帮助新手方面非常出色。那里的信息太多了,而且变化如此之快,肯定会让人不知所措地想知道要学习什么方法。
【问题讨论】:
标签: java jsp jakarta-ee web-applications jstl