2

フォームが送信されると、値がゼロの空のフィールドも取得されます。埋められたフィールドだけを受け取りたい。LR 5.2.3 を使用。

前もって感謝します!アディア


更新 (Web フォームの view.jsp ファイル):

<script type="text/javascript">
    jQuery(document).ready(
        function() {
            jQuery('#<portlet:namespace />fm').submit(
                function() {
                    var keys = [];
                    var fieldLabels = {};
                    var fieldOptional = {};
                    var fieldValidationErrorMessages = {};
                    var fieldValidationFunctions = {};
                    var fieldsMap = {};

                    <%
                    int fieldIndex = 1;
                    fieldLabel = preferences.getValue("fieldLabel" + fieldIndex, StringPool.BLANK);

                    while ((fieldIndex == 1) || Validator.isNotNull(fieldLabel)) {
                        fieldOptional = PrefsParamUtil.getBoolean(preferences, request, "fieldOptional" + fieldIndex, false);
                        String fieldType = preferences.getValue("fieldType" + fieldIndex, "text");
                        String fieldValidationScript = preferences.getValue("fieldValidationScript" + fieldIndex, StringPool.BLANK);
                        String fieldValidationErrorMessage = preferences.getValue("fieldValidationErrorMessage" + fieldIndex, StringPool.BLANK);
                    %>

                        var key = "<%= HtmlUtil.escape(fieldLabel) %>";

                        keys[<%= fieldIndex %>] = key;

                        fieldLabels[key] = "<%= HtmlUtil.escape(fieldLabel) %>";
                        fieldValidationErrorMessages[key] = "<%= fieldValidationErrorMessage %>";

                        function fieldValidationFunction<%= fieldIndex %>(currentFieldValue, fieldsMap) {
                            <c:choose>
                                <c:when test='<%= Validator.isNotNull(fieldValidationScript) %>'>
                                    <%= fieldValidationScript %>
                                </c:when>
                                <c:otherwise>

                     jQuery(this).children(':input[value=""]').attr("disabled", "disabled");

                                    return true;
                                </c:otherwise>
                            </c:choose>
                        };

                        fieldOptional[key] = <%= fieldOptional %>;
                        fieldValidationFunctions[key] = fieldValidationFunction<%= fieldIndex %>;

                        <c:choose>
                            <c:when test='<%= fieldType.equals("radio") %>'>
                                fieldsMap[key] = jQuery("input[name='<portlet:namespace />field<%= fieldIndex %>']:checked").val();

                                if (!fieldsMap[key]) {
                                    fieldsMap[key] = '';
                                }
                            </c:when>
                            <c:otherwise>
                                fieldsMap[key] = jQuery("#<portlet:namespace />field<%= fieldIndex %>")[0].value;
                            </c:otherwise>
                        </c:choose>

                    <%
                        fieldIndex++;
                        fieldLabel = preferences.getValue("fieldLabel" + fieldIndex, "");
                    }
                    %>

                .
                .
                .
            );
        }
    );
</script>
4

3 に答える 3

0

あなたのコードは理解するのがより複雑です。jquery検証を使用してLiferayの検証フォームに使用するコードを提供しています。

これは通常の形式です:

<form action='<portlet:actionURL/>' method="post" id="frmPin">
        <table id="pinTable">
            <tr>
                <td width="170px">
                    Email:
                </td>

                <td>
                    <form:input path="model.userEmail" type="email" id="userEmail"/>
                </td>
            </tr>
            <tr>
                <td width="170px">
                New Pin:
                </td>
                <td>
                    <form:input path="model.pin" maxlength="4" type="number" id="pin"/>
                </td>
            </tr>

            <tr>
                <td colspan="2"><input type="submit" id="btnResetPin" value="Reset PIN" name="resetPin"></td>
            </tr>
        </table>
    </form>

そして、javascript の Jquery Validation コード:

<script type="text/javascript">
jQuery("#btnResetPin").click(function(){
    jQuery("#frmPin").validate({
        rules : {
            userEmail : "required",
            pin : {
                required : true,
                maxlength: 4,
                minlength: 4
            }
        },
        messages : {
            userEmail : {
                required: "Please enter the Email Address"
            },
            pin : {
                required: "Please enter the PIN",
                maxlength : "Please enter 4 digits PIN",
                minlength : "Please enter 4 digits PIN"
            }
        }
    });
})
</script>

これは、必要な固定長の入力に役立ちます。jquery 検証を使用して、さらに多くを追加できます。

ポートレットで jquery 検証を有効にするには、タグの前に liferay-portlet.xml にフロータグを追加する必要があります</portlet>

<header-portlet-javascript> http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js </header-portlet-javascript>

これがあなたを助けることを願っています。ありがとう。

于 2014-12-22T11:58:48.837 に答える
0

フォームが値のないフィールドを送信するのを止める唯一の方法は、Javascript を使用してフォームの送信を制御し、すべてのフォーム フィールドを反復処理し、データ オブジェクトを構築してフォームに投稿することです。それ以外の場合は、すべてのフィールドが送信されます。さまざまなタイプのフォーム フィールド (選択、ラジオ、チェックボックスなど) がある場合、これは複雑になる可能性があるため、フォーム処理コントローラーで空白/null 値をチェックする方が実際には簡単で優れています。

于 2012-08-10T17:21:00.917 に答える
0

ここで見つけることができるjQuery Validateを強くお勧めします:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

使い方は簡単で、あらゆる Web フォームの検証に最適です。これを使用して、Liferay でポートレットに作成したすべてのフォームを検証しました。すぐに使用できる空のフィールド、電子メール アドレスなどの検証の多くの範囲が提供されますが、独自のルールを作成する柔軟性も提供されます。

標準の JavaScript よりもきれいで、簡単で、優れているので、ぜひチェックしてください。

于 2012-08-10T18:46:26.990 に答える