Как вызвать метод Java, нажав кнопку в JSP, а также передать параметр? - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно передать параметр, заданный пользователем, в метод 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 голосов
/ 03 мая 2019

Измените свой метод публикации для получения 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()

0 голосов
/ 03 мая 2019

Ваше действие указывает на ваш метод правильно

<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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...