Проблема с отправкой идентификатора из одного JSP в другой (ссылка для обновления) - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть проблема со ссылкой для обновления моей транзакции.На одном jsp у меня есть список с транзакциями, и после нажатия кнопки «Обновить», которая является ссылкой, я хотел передать файл TransactionsId, обновить его, сохранить и вернуться к списку. Я использовал скрытый параметр c: и он не работает. У меня нетИдея, почему он не передает формы id и автозаполнения. Кажется, что значения передаются в сеансе, когда я нажал кнопку тестирования транзакции:

http://localhost:8080/transaction/addTransaction?transactionId=64&userId=1

Вот контроллер транзакции:

@Controller
@RequestMapping("/transaction")
public class TransactionController {

@Autowired
TransactionService transactionService;

@Autowired
CategoryService categoryService;

@Autowired
UserService userService;

@GetMapping("/addTransaction")
public String transactionsList(Model theModel){
    Transaction transaction = new Transaction();
    theModel.addAttribute("user",userService.getAllUsers());
    theModel.addAttribute("category", categoryService.getAllCategories());
    theModel.addAttribute("newTransaction", transaction);
    return "addTransaction";
}

@PostMapping("/saveTransaction")
public String saveTransaction(@ModelAttribute("newTransaction") Transaction 
newTransaction,
                              BindingResult theBindingResult,
                              HttpServletRequest request) throws 
ParseException {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String date = request.getParameter("transactionDate");
    LocalDate localDate = LocalDate.parse(date, formatter);
    Date formatedDate = 
Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.ofHours(-3)));
    newTransaction.setTransactionDate(formatedDate);
    transactionService.saveTransaction(newTransaction);
    return "redirect:/user/userPage";
}

@GetMapping("/deleteTransaction")
public String deleteUser(@RequestParam("transactionId") int idFromTransactionToDelete,
                         @RequestParam("userId") int loggedUserId,
                         RedirectAttributes redirectAttributes){
    transactionService.deleteTransactionById(idFromTransactionToDelete);
    User loggedUser = userService.getUserById(loggedUserId);
    redirectAttributes.addFlashAttribute("loggedUser", loggedUser);
    return "redirect:/user/userPage";
}


@GetMapping("/updateTransaction")
public String updateUser(@RequestParam("transactionId") int 
idFromTransactionToUpdate,
                         @RequestParam("userId") int loggedUserId,
                         RedirectAttributes redirectAttributes,
                         Model theModel){
    Transaction transactionToUpdate = transactionService.getSingleTransactionById(idFromTransactionToUpdate);
    transactionToUpdate.setUser(userService.getUserById(loggedUserId));
    theModel.addAttribute("newTransaction",transactionToUpdate);
    theModel.addAttribute("category", categoryService.getAllCategories());
    User loggedUser = userService.getUserById(loggedUserId);
    redirectAttributes.addFlashAttribute("loggedUser", loggedUser);
    redirectAttributes.addFlashAttribute("newTransaction", 
    transactionToUpdate);
    return "addTransaction";
}
}

Страница списка транзакций:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<html>
<head>
<title>User page</title>
</head>
<body>
<c:url var="addTransactionLink" value="/transaction/addTransaction"/>
<c:url var="addFixedTransactionLink" 
value="/fixedTransaction/addFixedTransaction"/>

<h1>Welcome ${loggedUser.login} !</h1>
<br>
<h2>Here are your latest transactions:</h2>
<br>

<a href=${addTransactionLink}>
    <input type="button" value="Add Transaction"/>
</a>

<a href=${addFixedTransactionLink}>
    <input type="button" value="Add Fixed Transaction"/>
</a>

<table>
        <tr>
            <th>Category</th>
            <th>Price</th>
            <th>Description</th>
            <th>Date</th>
        </tr>
    <c:forEach var="transaction" items="${userTransactions}">
        <c:url var="deleteTransactionLink" 
value="/transaction/deleteTransaction">
            <c:param name="transactionId" 
value="${transaction.transactionId}"/>
            <c:param name="userId" value="${loggedUser.id}"/>
        </c:url>
        <c:url var="updateTransactionLink" 
value="/transaction/addTransaction">
            <c:param name="transactionId" 
value="${transaction.transactionId}"/>
            <c:param name="userId" value="${loggedUser.id}"/>
        </c:url>

        <tr>
            <td>${transaction.category.categoryName}</td>
            <td>${transaction.moneyAmount}</td>
            <td>${transaction.description}</td>
            <td>${transaction.transactionDate}</td>
            <td><a href="${deleteTransactionLink}">Delete</a> </td>
            <td><a href="${updateTransactionLink}">Update</a> </td>
            <td>${transaction.transactionId}</td>
        </tr>
    </c:forEach>
</table>

</body>
</html>

И добавить транзакцию в формуляр:

<%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Add Transaction Form</title>
<link rel="stylesheet"
      href="${pageContext.request.contextPath}/resources/css/style.css"/>
</head>
<body>

    <h1>Add transaction to database:</h1>

    <form:form action="saveTransaction" modelAttribute="newTransaction" 
method="post">
        <form:hidden path="transactionId"/>
        ${newTransaction.toString()}
        ${newTransaction.transactionId}
<table>

<tr>
    <td><label>Choose category:</label></td>
    <td><form:select name="category.id" path="category.id">
        <c:forEach items="${category}" var="category">
            <form:option value="${category.id}">${category.categoryName}
            </form:option>
        </c:forEach>
    </form:select>
</tr>

<tr>
    <td><label>Choose user:</label></td>
    <td><form:select name="user.id" path="user.id">
            <c:forEach items="${user}" var="user">
                <form:option value="${user.id}">${user.login}
                </form:option>
            </c:forEach>
        </form:select>
</tr>
        <tr>
            <td><label>Amount:</label></td>
            <td><form:input path="moneyAmount" />
            </td>
        </tr>

        <tr>
            <td><label>Transaction date:</label></td>
            <td><form:input type = "date" path="transactionDate"/>
            </td>
        </tr>

        <tr>
            <td><label>Description:</label></td>
            <td><form:input path="description" />
            </td>
        </tr>

        <tr>
            <label></label>
            <td><input type="submit" value="Submit" class="save"/>
            </td>
        </tr>
</table>
    </form:form>

</body>
</html>

1 Ответ

0 голосов
/ 15 февраля 2019

Проблема, кажется, в вашем коде.Вы определили в jsp:

   <c:url var="updateTransactionLink" 
   value="/transaction/addTransaction">

в то время как в коде Java:

   @GetMapping("/updateTransaction")
   public String updateUser(@RequestParam("transactionId") int 

В JSP Измените его на:

   <c:url var="updateTransactionLink" 
   value="/transaction/updateTransaction">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...