繁体   English   中英

如何从Servlet获取对象作为参数

[英]How I can get object as parameter from Servlet

我不知道如何将getParameter()与对象配合使用,因为我知道这是不可能的。 那我该怎么办?

货币currency = req.getParameter(“ currencies”);-不起作用。

我的servlet:

public class AddPurseServlet extends HttpServlet {
private PurseDao purseDao;
private CurrencyDao currencyDao;

@Override
public void init() throws ServletException {
    purseDao = (PurseDao) getServletContext().getAttribute("purseDao");
    currencyDao = (CurrencyDao) getServletContext().getAttribute("currencyDao");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    List<Currency> currencies = currencyDao.getAll();

    req.setAttribute("currencies", currencies);

    req.getRequestDispatcher("WEB-INF/view/addPurse.jsp").forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    User user = (User) session.getAttribute("user");
    String amount = req.getParameter("amount");
    Currency currency = req.getParameter("currencies");

    Purse purse = new Purse(user, currency, new BigDecimal(amount), new Timestamp(System.currentTimeMillis()));

    purseDao.insert(purse);

    resp.sendRedirect("userPage");
}
}

在我的jsp页面上,我需要货币和金额参数:

<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
</head>
<body>
<h1>Hello USER!</h1>
<div class="container">
<h1>Save User</h1>
<form method="post" action="addPurse">
    <div class="form-group">
        <label>Currency</label>
        <select>
            <c:forEach var="currency" items="${currencies}">
                <option value="${currency.id}">${currency.name}</option>
            </c:forEach>
        </select>
    </div>
    <div class="form-group">
        <label>Amount</label>
        <input class="form-control" name="amount" placeholder="Amount">
    </div>
    <input class="btn btn-default btn-xs" type="submit" value="Save">
    <a class="btn btn-default btn-xs" href="usersList" role="button">cancel</a>
</form>
</div>
</body>
</html>

参数是字符串。

如果您的货币是枚举

final String currencyStr = request.getParameter("currency");
final Currency currency = Stream.of(Currency.values()).filter(currency -> currency.code.equals(currencyStr)).findFirst().orElse(null));

因此,我从您的代码中了解到,您正在尝试填充货币列表,然后尝试为货币对象设置一些金额。

为此,您用唯一的ID来标识货币。 太完美了。现在您需要了解的是,您实际上并不需要JSP页面中的对象。 您只需要货币ID。

所以我会四处修改您的JSP:

<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
</head>
<body>
<h1>Hello USER!</h1>
<div class="container">
<h1>Save User</h1>
<form method="post" action="addPurse">
    <div class="form-group">
        <label>Currency</label>
        <select id="currency" name="currency">
            <c:forEach var="currency" items="${currencies}">
                <option value="${currency.id}">${currency.name}</option>
            </c:forEach>
        </select>
    </div>
    <div class="form-group">
        <label>Amount</label>
        <input class="form-control" name="amount" placeholder="Amount">
    </div>
    <input class="btn btn-default btn-xs" type="submit" value="Save">
    <a class="btn btn-default btn-xs" href="usersList" role="button">cancel</a>
</form>
</div>
</body>
</html>

现在,进入您的servlet。 看到关键字“ DAO”和“ CurrencyDAO”,我假设您正在使用JPA / Hibernate。 因此,您需要使用以下内容修改代码:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    User user = (User) session.getAttribute("user");
    String amount = req.getParameter("amount");
    String currencyid = req.getParameter("currency");
//Get your currency object from database
    Currency currencyToBeEdited = currencyDao.findById(Integer.parseInt(currencyid));

//Add the code to set the amount and save it back to the database

    Purse purse = new Purse(user, currency, new BigDecimal(amount), new Timestamp(System.currentTimeMillis()));

    purseDao.insert(purse);

    resp.sendRedirect("userPage");
}

注意:我不确定您的目标100%,但我提供了建议,希望能为您指明正确的方向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM