java - 通过 Spring 根据请求填充集合?

标签 java spring servlets spring-mvc

我有一个可以输入购买的页面,以及购买的所有 foos。 我在一个 html 文档中得到了三个元素,它们被解析为逗号分隔的格式。

function submitStuff()
{
//grab each cells value from dynamically built table based on user entries
//appending comma
    document.form.ids.value=Ids; 
    document.form.price.value=prices; 
    document.form.qtys.value=qtys; 
    document.form.submit(); 
}

一旦分解,每个 id/price/qty 应该填充到一个对象中......

public class foo{ 
private int id; 
private BigDecimal price; 
private int qty; 
//set&get;
}

它可以作为另一个对象的集合...

public class purchase{
private Date date; 
private int buyId;
private List<foo> purchases;
//set&get;
}

我知道我可以获取请求参数并一个一个地构建 foo 对象。我认为有一种更好的方法可以在对购买对象执行数据绑定(bind)时填充该列表,因为它可以正确填充所有其他属性。

最佳答案

除了将参数连接成一个单独的逗号分隔参数并在服务器端将其拆分(老实说,这是一种漂亮的 nasty 方法),您还可以只使用相同的参数名称发送多个参数值。然后它将作为 String[] 数组由 HttpServletRequest#getParameterValues() 提供。在参数名称上。

我不使用 Spring,所以这里有一个普通的 HTML/Servlet 示例来说明这个想法:

<table>
    <tr>
        <td>ID: 12<input type="hidden" name="id" value="12"></td>
        <td>Qty: <input type="text" name="qty"></td>
        <td>Price: $100.00<input type="hidden" name="price" value="100.00"></td>
    </tr>
    <tr>
        <td>ID: 54<input type="hidden" name="id" value="54"></td>
        <td>Qty: <input type="text" name="qty"></td>
        <td>Price: $200.00<input type="hidden" name="price" value="200.00"></td>
    </tr>
    <tr>
        <td>ID: 8<input type="hidden" name="id" value="8"></td>
        <td>Qty: <input type="text" name="qty"></td>
        <td>Price: $500.00<input type="hidden" name="price" value="500.00"></td>
    </tr>
</table>

小服务程序:

String[] ids = request.getParameterValues("id");
String[] qtys = request.getParameterValues("qty");
String[] prices = request.getParameterValues("price");

for (int i = 0; i < ids.length; i++) {
    Long id = Long.parseLong(ids[i]);
    Integer qty = Integer.parseInt(qtys[i]);
    BigDecimal price = new BigDecimal(prices[i]);
    // ...
}

然而,我非常质疑是否需要将价格也从客户端发送到服务器。我宁愿(重新)计算服务器端的价格,因为客户端可以完全控制它发送的请求参数,因此能够在您的表单控制之外更改参数值。

关于java - 通过 Spring 根据请求填充集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286840/

相关文章:

java - onclicklistener 事件的空指针异常

java - 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

java - Crudrepository - 没有找到依赖项类型的合格 bean : expected at least 1 bean which qualifies as autowire candidate for this dependency

java - 当 Spring 尝试加载 XML 文件时,防止 W3.org 出现 503 错误

java - Spring Controller单元测试最佳实践

java - session.removeAttribute 在 java 中不起作用

java - 我是否正确理解了 servlet 的工作?

java - Windows Bat 文件无法使用德语元音变音

JavaEE - Web 应用程序和导航逻辑

java - 如何在同一行中打印两个变量