0

保存、更新、クエリ用の 3 つのボタンを持つフォームがありますが、サーバー側でユーザーがクリックしたボタンを知りたいです。request.getParameter("action") と request.getAttribute("action") を使用してみましたが、両方とも null を返します。サーバーでこれを取得する方法はありますか?セッションに「アクション」値を保存できますか? もしそうなら、セッション変数を作成して保存するにはどうすればよいですか?

コード

<button class="btn" value="save"  id="action"></button>

<button class="btn" value="update"  id="action"></button>

<button class="btn" value="query"  id="action"></button>

基本的に、サーバーへの再投稿を避けようとしています。私は POST/redirect/GET パターンを使用することを想定していますが、私のメソッドはリダイレクトをサポートしておらず、フォームが変更されてエラーが発生した場合でも、サーバーの検証を返すことができません。

コントローラ

@RequestMapping(value = "crime_registration_save.htm", method = RequestMethod.POST)
    public ModelAndView handleSave(@Valid @ModelAttribute Crime crime,HttpServletRequest request,
            HttpServletResponse response,BindingResult result, ModelMap m, Model model) throws Exception {


        String action = request.getParameter("action");

    logger.info("The requested action is "+ action);
        if (result.hasErrors()) {

            logger.debug("Has Errors In crime_registration_save");
            model.addAttribute("dbcriminals", myCriminalList);
            model.addAttribute("dbvictims", myVictimList);
            model.addAttribute("status", myStatusList);
            model.addAttribute("crimeCategory", myCrimeCategoryList);
            model.addAttribute("crimeLevel", myCrimeLevelList);
            model.addAttribute("officers", myOfficerList);

            model.addAttribute("victimList", crime.getVictims());
            model.addAttribute("criminalList", crime.getCriminals());

            model.addAttribute("crimeTypeList",
                    crimeTypeManager.getCrimeTypeList(crime.getOffenceCatId()));
            model.addAttribute("icon", "ui-icon ui-icon-circle-close");
            model.addAttribute("results", "Error: Unable to Save Record!");

            return new ModelAndView("crime_registration");
        }
        logger.debug("No errors going to preform save");

        int crimeRecNo;

        crimeRecNo = crimeManager.saveCrime(crime);

        model.addAttribute("dbcriminals", myCriminalList);
        model.addAttribute("dbvictims", myVictimList);
        model.addAttribute("status", myStatusList);
        model.addAttribute("crimeCategory", myCrimeCategoryList);
        model.addAttribute("crimeLevel", myCrimeLevelList);
        model.addAttribute("officers", myOfficerList);
        model.addAttribute("save", "disabled");
        model.addAttribute("victimList", crime.getVictims());
        model.addAttribute("criminalList", crime.getCriminals());

        model.addAttribute("crimeTypeList",
                crimeTypeManager.getCrimeTypeList(crime.getOffenceCatId()));
        model.addAttribute("crimeRecNo", crimeRecNo);
        model.addAttribute("crimeRecordNoStatus", "true");
        model.addAttribute("icon", "ui-icon ui-icon-circle-check");
        model.addAttribute("results", "Record Was Saved");



        return new ModelAndView("crime_registration");
    }

jquery

function submitPage(urlMapping,method,action) {
        alert(urlMapping);
        document.getElementById("crime_registration").action = urlMapping;
        document.getElementById("crime_registration").target = "_self";
        document.getElementById("crime_registration").method = method;
        document.getElementById("crime_registration").submit();
        $('#action').val(action);

        alert($('#action').val());
        return false;
    }
4

3 に答える 3

2

フォームのものはリクエスト属性ではなく、パラメーターです。

サブミットを使用して名前を付け、その名前でパラメーターを取得します。

<input type="submit" class="btn" value="save" name="action" />

String button = request.getParameter("action");

フォームに含まれていない場合は、JavaScript が必要ですが、あなたの質問はそうであることを示唆しています。

于 2013-04-25T02:29:44.250 に答える
1

ここでの解決策は、隠し変数を呼び出しaction、ボタンをクリックすると、クリックされたボタンの値で隠し変数を更新し、フォームを送信することです。

元:

<form action="" method="post" name="myform">
    <input type="hidden" name="action" />

    ....

    <button class="btn" value="save"  id="action" onclick="submitForm(this)"></button>
    <button class="btn" value="update"  id="action" onclick="submitForm(this)"></button>
    <button class="btn" value="query"  id="action" onclick="submitForm(this)"></button>
</form>

それで

<script>

    function submitForm(btn){
        var frm = document.myform;

        frm.action.value = btn.value;
        frm.submit();
        return false;

    }

</script>
于 2013-04-25T02:30:31.610 に答える
1

ボタンに追加する必要があるのは、属性 type="submit" と属性 name="parametername" だけです。次に、ボタン タグは送信タイプの入力のように機能し、値が表示テキストまたはボタン タグ内に配置したものとは異なる場合があるという利点があります。

ajax を使用してフォームを送信する場合は、jquery ajaxform プラグインを使用してこれを処理します。

于 2013-04-25T05:27:34.383 に答える