Как я могу получить на своем сервлете значение идентификатора вместо отображаемого значения, используя md-autocomplete?

Я изучаю angularjs две недели. Я застрял технически в простой проблеме, но я не мог найти ответ. Я пытаюсь использовать md-autocomplete в своем проекте, и я застрял, потому что хочу получить значение идентификатора вместо отображаемого значения в моем сервлете.

Вот мой md-автозаполнение:

<div ng-controller="DemoCtrl as ctrl" layout="column" ng-cloak>
<md-content class="md-padding">
    <md-autocomplete flex="true" 
                     required="true"
                     md-input-name="autocompleteField" 
                     md-input-minlength="2" 
                     md-input-maxlength="18" 
                     md-no-cache="ctrl.noCache" 
                     md-selected-item="ctrl.selectedItem" 
                     md-search-text="ctrl.searchText" 
                     md-items="item in ctrl.querySearch(ctrl.searchText)" 
                     md-item-text="item.display"
                     md-require-match="true" 
                     md-floating-label="Favorite state">
        <md-item-template>
            <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
        </md-item-template>
        <div ng-messages="formSave.autocompleteField.$error" ng-if="formSave.autocompleteField.$touched || formSave.$submitted">
            <div ng-message="required">You <b>must</b> have a favorite state.</div>
            <div ng-message="md-require-match">Please select an existing state.</div>
            <div ng-message="minlength">Your entry is not long enough.</div>
            <div ng-message="maxlength">Your entry is too long.</div>
        </div>
    </md-autocomplete>
</md-content>

JS:

(function () {
'use strict';
angular
        .module('autocompleteFloatingLabelDemo', ['ngMaterial', 'ngMessages'])
        .controller('DemoCtrl', DemoCtrl);
function DemoCtrl($http, $timeout, $q) {
    var self = this;
    self.states = null;
    self.selectedItem = null;
    self.searchText = null;
    self.querySearch = querySearch;

    function querySearch(query) {
        var deferred = $q.defer();
        $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=utf-8";
        var all;
        $http({
            method: 'GET',
            url: '/employee',
            params: {
                employeeListByName: true,
                active:'active',
                name: query,
                async: false
            }
        }).then(function (response) {
            all = response.data;
            $timeout(function () {
                deferred.resolve(all);
            }, Math.random() * 1000, false);
            deferred.promise;
        }, function () {
            alert('Error');
        });
        return deferred.promise;

    }
}})();

Список моего автозаполнения

[{"id" : "90", "display" : "Emplooy 1"},{"id" : "66", "display" : "Emplooy 2"}, {"id" : "179", "display" : "Emplooy 3"}, {"id" : "48", "display" : "Emplooy 4"}]

Сервлет:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response){
        String id = request.getParameter("autocompleteField");//the result its the display value, I want to get the id value;
}

У кого-нибудь есть идеи?


person Fernando Limeira    schedule 12.07.2018    source источник


Ответы (1)


У вас уже есть выбранный элемент в области действия вашего контроллера (selectedItem). Итак, все, что вам нужно сделать, это когда вы отправляете форму, вы можете получить идентификатор,

selectedItem.id

Так что, возможно, у вас есть кнопка в конце формы

<button ng-click="submit()">Click me</button>

Затем в вашем контроллере

function submit(){
   var id = selectedItem.id;
   //make http call
}

Документация для md-autoselect: https://material.angularjs.org/latest/api/directive/mdAutocomplete Документация для ng-click: https://docs.angularjs.org/api/ng/directive/ngClick

person Geoff Lentsch    schedule 12.07.2018
comment
Привет, Фернандо — мой друг, и он объяснил мне, чего он действительно хочет. То, как вы ответили, правильное, это отправить выбранный элемент сервлету в событии onchange, он хочет отправить item.id после заполнения всех полей формы. в событии отправки. - person Jorge Campos; 12.07.2018
comment
Спасибо @GeoffLentsch, я не могу реализовать отправку, поэтому моим решением было создать скрытый ввод и реализовать md-selected-item-change=ctrl.selectedItemChange(ctrl.selectedItem) для заполнения скрытого поля. - person Fernando Limeira; 13.07.2018
comment
нужна помощь в этом stackoverflow.com/questions/51528680/ - person its me; 26.07.2018