2

この問題を検索したところ、名前の競合に関する問題がいくつかありましたが、理由を見つけることができませんでした。助けていただければ幸いです。以下は、コントローラーを呼び出す .jsp の行です。

<td>
    <a href="message/createMessage">
        Reply
    </a>
    <input type="hidden" name="receiver" value="${message.fromUser}">
</td>

${message.fromUser}モデルから必要なプロパティを取得します。このページの他のリンクが機能し、同じモデルを使用しているため、それが問題の原因ではないと確信しています。コントローラは次のとおりです。

@Controller
@RequestMapping("/message")
public class MessageController
{

    @RequestMapping("createMessage")
    public String createMessage(
        @RequestParam("receiver") String receiver,
        HttpSession session,
        Model model)
    {
        try
        {
            MessageDAO mDao = new MessageDAO();
            Message message = new Message();
            String fromUser = (String) session.getAttribute("userName");
            message.setFromUser(fromUser);
            message.setUserName(receiver);
            Message message2 = mDao.create(message);
            model.addAttribute(message);

            return "newMessage";

        }
        catch (Exception e)
        {
            model.addAttribute("message", "Can't create message!");
            return "redirect:/"; // ?? should add a dialog box for error
        }

    }
}

ご協力ありがとうございました!

問題を解決する試みとして、最初の回答に基づいて、url-rewriting を使用しようとしました。コントローラーで @PathVariable("receiver") を使用しました。それでも同じ問題。ここに完全に改訂された jsp を追加しました。メッセージの返信リンクをクリックするとエラーが発生します。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>welcome ${sessionScope.user.userName}</h1>

<form:form method="POST" action="message/deleteMessage">
<table border="1">
    <tr>
        <th>Message ID</th>
        <th>From User</th>
        <th>Message</th>
        <th>Date</th>
        <th>Reply to User</th>
        <th>Delete</th>
    </tr>

    <c:forEach items="${messages}" var="message"  >
    <tr>
      <td>${message.messageID}</td>
      <td>${message.fromUser}</td>
      <td>${message.message}</td>
      <td>${message.messageDate}</td>
      <td><a href="message/createMessage?receiver=${message.fromUser}">Reply</a></td>
      <td><input type="checkbox" name="delete" value="${message.messageID}"> </td>
    </tr>
    </c:forEach>
    <tr><td colspan="6"><input type="submit" value="Delete selected messages"></td></tr>    

</table>
</form:form>

4

1 に答える 1

1

「フォーム」には、フォームの送信を行わないプレーンなhtmlハイパーリンクがあります(したがって、非表示フィールドの値は送信されません。

<FORM action= 'message/createMessage' >したがって、要素を宣言する必要があります。

次に、AJAXを使用してフォームを送信するか、送信ボタンを作成する必要があります。別の方法は、フォームの値を追加して手動でレシーバー値を渡すことですcreateMessage?receiver=someValue(これを例として追加しましたが、これは推奨される方法ではないと思います。とにかくすべてに長所と短所があります)。

したがって、パラメータを渡す方法はたくさんあります。

http://www.w3.org/TR/html401/interact/forms.htmlを参照してください

于 2012-12-09T08:21:34.747 に答える