【问题标题】:Set value on DynaActionForm / DynaValidatorForm in JSP在 JSP 中设置 DynaActionForm / DynaValidatorForm 的值
【发布时间】:2012-01-06 22:09:24
【问题描述】:

我想在 DynaForm 上设置一个值,这在 Action 类中很容易做到,但我想在 JSP 本身中这样做,方法是将会话中的一个值复制到表单中。

<form-bean name="inputCIDs" type="org.apache.struts.validator.DynaValidatorForm">
  <form-property name="containerIDFormat" type="java.lang.String"/>
</form-bean>

以下 Java 代码在 JSP 中有效,但是否有 Struts 1.x 或 JSTL 标记可以执行等效操作?

<%
    DynaActionForm form = (DynaActionForm) request.getAttribute("inputCIDs");
    form.set("containerIDFormat", session.getAttribute("varInSession"));
%>

该属性将由用户使用选择框使用和更改

<html:select property="containerIDFormat">
  <html:options collection="containerIDFormats" property="value" labelProperty="description"/>
</html:select>

环境:
Struts 1.2.4
标签库 1.1.2
JBoss 4.0.2

【问题讨论】:

    标签: java jsp jstl struts-1


    【解决方案1】:

    为什么? JSP 不适合此类工作。

    <html:hidden property="containerIDFormat" value="${varInSession}"/>
    

    如果您只是设置表单值,它无论如何都不会在提交过程中继续存在,因为将创建一个新的请求范围的表单。如果它是一个会话范围的表单,那么在 JSP 中做这项工作的理由就更少了。

    【讨论】:

    • 你是对的。这是我正在努力完成的终极挑战。我想从中提取一个选择框的值并将其放入会话中。但是,如果我没有在为动作定义的 DynaForm 中声明变量,它就不起作用了。此特定变量用于多种表单,并且可以从多个操作加载页面。通过将代码放入 JSP 中,我确保表单中的值与会话中的值匹配。有没有更好的办法?
    • @JustinKSU 好吧,使用动态表格意味着没有reset。仍然可以在动作中完成;如果这一切都结束了,可能是一个薄弱的基础行动。也许,使用隐藏属性同样容易。不确定您对选择框的意思;如果一个表单有一个选择框,它应该有一个属性。
    • 有没有办法映射一个属性,以便它的值自动保存到会话中,而不是把它放在表单上?换句话说,有没有办法复制属性,而不必将代码放在我的Action中从表单复制到Session?
    • 我不知道,尽管创建一个请求处理器来检查具有特定属性的表单,如果它存在,从会话值复制它是微不足道的。跨度>
    • 谢谢。我可能不得不这样做。您提出的解决方案提交了文字值“${lastChosenContainerIDFormat}”,而不是用户选择的内容。我更新了问题以包含下拉菜单。
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 2014-06-29
    • 2010-10-14
    • 1970-01-01
    • 2015-04-18
    • 2013-07-21
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多