【问题标题】:Manipulating percentage - cancel keeps changes操纵百分比 - 取消保留更改
【发布时间】:2014-11-18 22:03:39
【问题描述】:

我正在使用 Spring-MVC 和 JSP,除了我的“取消”按钮外,一切正常。我有一个包含 /edit 和 /save 的控制器。进入 /edit,百分比值必须呈现为 (0 >= x >= 100) 值。保存时,我们必须保存为百分比 (0 >= x >= 1.0)。在编辑表单中,如果您更改百分比值并点击取消,则不会进行更改,但该值将与之前的值相比 *100。例如,如果您在表单上有 15%,并且在编辑下更改为 17.5 然后点击取消,则该值将变为 1500 而不是 15。

该值显然是 *100,但在取消期间永远不会恢复。我在 isCancelled(request) 之前放置了 /100 行,但这会使数字错误地更新为取消的内容。在上面的例子中,0.175 可以节省。保存通过休眠进入数据库,虽然我们从来没有保存(modelBean)。

是否有适当的方法来操作视图上的数字,但不将更改提交到数据库?我想在后端进行更改以避免用户恶作剧。

如果我可以提供任何进一步的信息/细节,请告诉我。

@RequestMapping(value = "/edit")
public String edit(@ModelAttribute("activeForm") SomeForm form, @RequestParam(value = "id", required = true) Long id) {
    MyBean bean = getBeanById(id);

    // Converts % to user friendly xx.xx.
    if (form.getPercentage() != null) {
        double per = form.getPercentage() * 100.0d;
        form.setPercentage(per);
        bean.setPercentage(per);
    }
    return someString;
}

@RequestMapping(value = "/save")
public String save(HttpServletRequest request, @ModelAttribute("activeForm") SomeForm form) {

    if (isCancelled(request)) {
        return REDIRECT_SUMMARY;
    }

    MyBean modelBean= getModel(form);

    // Converts user friendly xx.xx to %.
    if (form.getPercentage() != null) {
        double per = form.getPercentage() / 100.0d;
        form.setPercentage(per);
        modelBean.setPercentage(per);
    }
    save(modelBean);
    return someString;
}

public class SomeForm {
    private Double m_percentage = 1.0d;
    private Long m_id;

    // getters & setters here
}

<form:from action="/save" method="POST" modelAttribute="activeForm">
    <td><form:input path="valuationPercentage" maxlength="6"  />%</td>
    <jsp:include page="/lib/buttons.jsp" />
</form:form>

【问题讨论】:

    标签: java javascript hibernate jsp spring-mvc


    【解决方案1】:

    您是否有任何机会在您的视图中打开了 Hibernate 会话?例如使用OpenSessionInViewInterceptor?如果是这种情况并假设您的编辑控制器方法中的 MyBean 是托管 JPA 实体,则更改将被保留,因为您将百分比设置为您的 bean 和表单对象:

    form.setPercentage(per);
    bean.setPercentage(per);
    

    如果是这种情况,我将删除您的 bean 上的 setPercentage 调用并将其仅保留在表单上。

    顺便说一句:我不明白你为什么使用isCancelled(request)。如果要取消编辑,只需将取消按钮实现为指向REDIRECT_SUMMARY 表示的 URL 的链接。至少我是这样做的。

    【讨论】:

    • 谢谢博胡斯拉夫!删除 bean.setPercentage() 就可以了。我相信前几天我看这段代码的时间有点太长了 :) 这只是一个来自一个更大的企业系统的 sn-p,它在后台发生了很多事情。尽管没有故意保存,但 Hibernate 与 bean 更新有关。至于 REDIRECT_SUMMARY,我们有许多可以重定向到的 url,具体取决于您所在的位置。这对于应用程序来说是通用的。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2020-03-10
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2016-03-20
    相关资源
    最近更新 更多