如何通过单击JSP中的按钮并传递参数来调用Java方法?

时间:2019-05-03 16:18:58

标签: java spring-boot

我需要将用户给定的参数传递给java方法。

我有一个控制器类,两个JSP,一个index.jsp和bresult.jsp,我需要的是在索引页面上:用户可以提供输入,并通过“添加”按钮调用需要该方法的java方法。参数。

在我的控制器中:

@Autowired
    public void setA(Scheduler schedulerObject) {
        this.schedulerObject = schedulerObject;
    }
@GetMapping("/")
       public String index() {
           return "index";
       }
@PostMapping("/bresult")
    public String bresult(@RequestParam("newMachineType") String newMachineType, Model model) throws InterruptedException 
        {
                        schedulerObject.loadDataBase();
            schedulerObject.createDefaultMachines();
            some other codes here...
            return "bresult";
        }

index.jsp:

<form action="bresult" method="post">
    <table>
    <tr>
        <td>Enter new machine type:</td>
        <td><input id="newMachineType" name ="newMachineType"></td>
        <td><input type="submit" value="Submit"/></td>                      
    </tr>
    </table>
</form>

因此在索引中,如果我要添加任何新计算机,则在输入类型后,将按钮添加到列表中,如果单击“提交”,它将基于其他代码给出结果。

我如何调用参数(机器类型)并将其传递给我的java方法,但前提是我必须单击添加按钮?

2 个答案:

答案 0 :(得分:0)

您的操作正确指向了您的方法

<form action="bresult" method="post">
@PostMapping("/bresult")

您的参数(以html格式)在控制器中使用相同的名称

<td><input id="newMachineType" name ="newMachineType"></td>
@RequestParam("newMachineType") String newMachineType

这不起作用吗?您可以在控制器类中正常使用String。您在课堂上使用@Controller吗?尝试System.out.println(newMachineType)并在控制台中查看以验证该变量的值,并检查是否与html中传递的相同。

答案 1 :(得分:0)

更改您的发布方法,以使用HttpServletRequest获取表单值作为参数。

  

https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

@PostMapping("/bresult")
public String bresult(HttpServletRequest request, Model model) throws InterruptedException
{
    // ----

    String newMachineType = request.getParameter("newMachineType");
    ...
    // If more than one parameter for machine type 
    String newMachineType2 = request.getParameter("newMachineType2"); 
    String newMachineType3 = request.getParameter("newMachineType3"); 
    String newMachineType4 = request.getParameter("newMachineType4"); 
    ...

    // ----
    schedulerObject.loadDataBase();
    schedulerObject.createDefaultMachines();
    some other codes here...
    return "bresult";
}

用于多个动态实体。您可以更改html的方法:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js">
</script>
<script>
$(document).ready(function(){
    var counter = 0;
    $( "#addButton" ).click(function() {
        $('body > form > table > tbody > tr > td:nth-child(2)').after('<td><input id="newMachineType" name ="newMachineType' + counter + '"></td>');
        counter++;
    });
});
</script>

<button id="addButton" type="button">Add new machine type</button>
<form action="bresult" method="post">
    <table>
    <tr>
        <td>Enter new machine type:</td>
        <td><input type="submit" value="Submit"/></td>                      
    </tr>
    </table>
</form>

为新机器的添加按钮编辑了HTML。因此,您可以添加所需的数量。 然后提交所有内容并从bresult()

获取值