3

JSF2でフォームの送信を回避する方法、またはフォームの送信時に何もしない方法はありますか?

フォームにはいくつかの入力フィールド (20 個の入力フィールド) があり、値が変更されていない場合はフォームを送信したくありません。

JSFでこれを達成できる直接的な方法はありますか?

<h:form id="summaryForm" prependId="false">
     <h:inputText id="inputField1" value="#{summaryBean.inputFieldValue1}" />
     <h:inputText id="inputField2" value="#{summaryBean.inputFieldValue2}" />
     <h:inputText id="inputField3" value="#{summaryBean.inputFieldValue3}" />
     <h:inputText id="inputField4" value="#{summaryBean.inputFieldValue4}" />
     <h:inputText id="inputField5" value="#{summaryBean.inputFieldValue5}" />
     <h:commandButton action="#{summaryBean.submitSummary}" />
</h:form>
4

2 に答える 2

2

簡単な答えはノーです。単純なJSFではそれはできません。ただし、少しのJavaScriptとjQueryを使用して、クライアント側でそれを行うことができます。

... include jQuery somewhere here ...

<script>
var anyInputChanged = false;
var checkIfAnyValueChanged = function(){ return anyInputChanged; };
(function($) {
    $(function() {
        // set variable anyInputChanged to TRUE on event 'onchange',
        //    for the fields with class "submitOnlyIfChanged"
        $('.submitOnlyChanged').change(function(){ anyInputChanged = true; });
    });
})(jQuery);
</script>

<h:form id="summaryForm" prependId="false">
    <!-- set up all the fields with the class "submitOnlyIfChanged" -->
    <h:inputText class="submitOnlyIfChanged" id="inputField1"
       value="#{summaryBean.inputFieldValue1}" />
    <h:inputText class="submitOnlyIfChanged" id="inputField2"
       value="#{summaryBean.inputFieldValue2}" />
    <h:inputText class="submitOnlyIfChanged" id="inputField3"
       value="#{summaryBean.inputFieldValue3}" />

    <!-- set up a check if any field was changed on button click -->
    <h:commandButton onclick="return checkIfAnyValueChanged();"
       action="#{summaryBean.submitSummary}" />
</h:form>
于 2012-07-05T12:19:53.577 に答える
0

シンプルなアプローチ。

var allFields = document['formName'].elements;
var submit = document.getElementById("submit");
submit.disabled  = true;
var fieldsValue = [];
var x;
var y=0;
for( var i=0; i<allFields.length; i++ ){
    fieldsValue[i] = document.forms["formName"][allFields[i].name].value;
    document.getElementsByName(allFields[i].name)[0].addEventListener('input', function (evt) {
        x = fieldsValue.indexOf(this.value);
        x < 0 ? y = y+1 : y = y-1;
        y > 0 ? submit.disabled  = false : submit.disabled  = true;
    });

}
于 2019-08-11T07:49:21.010 に答える