Java 如何为单个表单提供不同的提交按钮,但不依赖于值属性?

Java 如何为单个表单提供不同的提交按钮,但不依赖于值属性?,java,forms,jsp,struts2,form-submit,Java,Forms,Jsp,Struts2,Form Submit,我正在使用以下代码为我的表单设置不同的提交按钮。问题是,如果我更改每个提交按钮的value属性的值,我也必须更改Java代码,就好像条件是基于这些值一样 我正在寻找另一种解决方案来避免这个问题,因此后端和前端将是独立的 JSP 我没有浏览所有的评论,但是从你的问题来看,我有一个想法,你可以使用一些javascript函数根据你想要的条件来设置表单的操作。因此,当表单提交时,会调用相应的操作。您甚至可以使用单个操作类和不同的方法,如edit、add等,这些方法可以映射到struts.xml文件中。

我正在使用以下代码为我的表单设置不同的提交按钮。问题是,如果我更改每个提交按钮的value属性的值,我也必须更改Java代码,就好像条件是基于这些值一样

我正在寻找另一种解决方案来避免这个问题,因此后端和前端将是独立的

JSP


我没有浏览所有的评论,但是从你的问题来看,我有一个想法,你可以使用一些javascript函数根据你想要的条件来设置表单的操作。因此,当表单提交时,会调用相应的操作。您甚至可以使用单个操作类和不同的方法,如edit、add等,这些方法可以映射到struts.xml文件中。在这种情况下,可以像
action=“*user”method=“{1}”
那样进行映射,因此action类中的方法edit()将被action editUser调用,delete()将被delete user调用…

此解决方案可能并非在所有情况下都很好,并且不会直接回答问题。我的解决方案取决于你行动的基础。如果您的按钮定义了对象上的不同操作,则可以执行以下操作

这不会将按钮移出您的操作,而是将它们放在应该的位置

考虑一个带有表单的页面,用户可以完成表单并将其提交到结果页面。结果页面将有导出按钮,允许用户以html、pdf、excel格式保存表单

您的jsp

    <s:submit button="true" key="form.btn.export.pdf" name="export" />
    <s:submit button="true" key="form.btn.export.excel" name="export"/>
    <s:submit button="true" key="form.btn.export.html" name="export"  />
那么在你的行动中不需要任何if/else

@Action(value = "export-action")
public String exportMethod(){
ExportHelper ex= new ExportHelper("report",export);//No if is required
inputStream = new ByteArrayInputStream( ExportHelper);
}
此简单的解决方案使您的操作更易于维护

暗示。
在这个解决方案中,后端和前端是不耦合的!我们将前端(jsp)耦合到控制器(Struts操作)。这是一个不错的方法

使用submit标记的方法或操作属性将每个方法或操作重定向到不同的方法/操作。

@chiliNUT假设您可以访问邮件列表,并且可以选择回复、移动或删除邮件。一旦您选择了其中一条消息,表单将用于将所选消息的id传递到后端,java代码将把相关页面返回到所选操作。然后您可以看到删除的结果、回复表单或移动表单。虽然还有许多其他情况,您可能需要为单个表单使用不同的提交BTN,以避免使用不同的单独表单。通过查看代码,您可以很容易地发现,当您单击其中一个BTN时,其值将发送到服务器,假设您按btn1,则“mysubmit1”将被传递……是的,没错,我就是这么说的!服务器知道根据该值做什么。所以这就是为什么我不明白你为什么要寻找另一种方式来做这件事。让我们说一次“移动”btn是“移动”,另一次它需要用另一种语言,让我们说它应该是“XXX”那么,在这种情况下,或者其他类似的情况下,我也必须考虑所有的这些价值。
    <s:submit button="true" key="form.btn.export.pdf" name="export" />
    <s:submit button="true" key="form.btn.export.excel" name="export"/>
    <s:submit button="true" key="form.btn.export.html" name="export"  />
public void setExport(String exportBtn) {
    if (exportBtn.toUpperCase().contains("PDF")) {
        this.export = "PDF";
    } else if (exportBtn.toUpperCase().contains("EXCEL")) {
        this.export = "XLSX";
    } else if (exportBtn.toUpperCase().contains("CVS")) {
        this.export = "CVS";
    } else if (exportBtn.toUpperCase().contains("HTML")) {
        this.export = "HTML";
    }

    LOG.debug("Exporting to is " + this.export);
}
@Action(value = "export-action")
public String exportMethod(){
ExportHelper ex= new ExportHelper("report",export);//No if is required
inputStream = new ByteArrayInputStream( ExportHelper);
}