【问题标题】:Change action attribute of Form for different action methods in Struts2为Struts2中的不同动作方法更改Form的动作属性
【发布时间】:2014-01-06 19:12:24
【问题描述】:

我在 JSP 页面名称 add.jsp 中创建了一个 from 来保存这样的数据

<s:form action="AddDomain">
            <s:push value="idp">
                <s:textfield name="domainName" label="Domain Name" />
                <s:textfield name="url" label="Domain URL" />
                <s:textfield name="noOfLicense" label="License Purchased" />
                <s:textfield name="licenseExpireDate" label="License Expire Date" title="YYYY-MM-DD like 2013-01-21" /> 
                <s:textfield name="userActiveDuration" label="Active User Duration"
                    title="please mention in days" />
                <s:textarea cols="30" rows="5" name="notes" label="Note"></s:textarea>
                <s:submit value="Add"></s:submit>
            </s:push>
        </s:form>

显示此视图的操作方法为

public String addDomainPage() {

    return ActionSupport.SUCCESS;
}

我创建了另一个页面,其中列出了所有域并提供了一个编辑链接来编辑任何域。当使用单击编辑 URL 时,调用此操作

public String loadDomain() {

    HttpServletRequest request = ServletActionContext.getRequest();
    String url = request.getParameter("durl");
    IDPBroker broker = new IDPBroker();
    idp = broker.getDomainByURL(url);
    return ActionSupport.SUCCESS;
}

成功完成操作后,我会显示add.jsp 页面。 Struts 在 JSP 页面中填充数据。

现在,问题是我想更改 表单标签的动作属性的值。我还想将value of submit button 更改为“编辑”。我计划在Action 类中创建一些私有attribute(action,Label),当调用addDomainPage 操作时,我将更改这些属性的值以添加页面。与loadDomain 操作类似。现在我不知道该怎么做这意味着如何在视图中使用这些私有属性。告诉我我做得对吗?下一步该做什么?

【问题讨论】:

    标签: java jsp url struts2 ognl


    【解决方案1】:

    同一个动作类可用于在提交按钮上映射不同的方法。喜欢

    <s:submit value="Add" method="addDomainPage" />
    <s:submit value="Load" method="loadDomain" />
    

    表单动作属性应该映射到动作类execute 方法,如果您使用这样的提交按钮,该方法将永远不会调用。默认开启的DMI允许调用指定的方法。

    如果您想动态更改 Struts 标记中的属性,您可以在 JSP 中使用 OGNL 表达式而不是硬编码值。为此,您应该在执行结果之前定义动态值的操作中定义属性。例如

    public String getAction(){
      return "AddDomain";
    }  
    
    <s:form action="%{action}">
    

    【讨论】:

    • 感谢@Roman 的工作。我还有另一个问题,我对 %{} 和 ${} 表达式有点困惑。我只是想知道我将哪个用于哪个目的。
    • %{} 用于 OGNL 表达式(并不总是需要),${} 用于 JSP EL 表达式(不用于 struts 标签的属性)。
    • 从您的回答中我了解到 %{} 用于我们想要在行动中定义的属性的值。我说的对吗?
    • 该操作在valueStack 中的top 上执行,因此可以通过OGNL 访问这些属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多