【问题标题】:don't link html <input> with js model and java model不要将 html <input> 与 js 模型和 java 模型链接
【发布时间】:2016-10-05 02:30:40
【问题描述】:

我有一个带有一些代码的登录页面。

<div ng-show="!loggedIn()">
        <form ng-submit="login()">
            Username:
            <input type="text" ng-model="userName"/>
            Password:
            <input type="password" ng-model="userPassword"/><span><input type="submit" value="Login"/>
        </form>
    </div>

登录链接与 js 文件中的用户名模型和用户密码 - 不是。

$scope.login = function() {
                $scope.error = null;
                mainService.login($scope.userName, $scope.userPassword).then(function(token) {
                    $scope.token = token;
                    $http.defaults.headers.common.Authorization = 'Bearer ' + token;
                    $scope.checkRoles();
                },
                function(error){
                    $scope.error = error;
                    $scope.userName = '';
                    $scope.userPassword = '';
                });
            };

...

 appModule.service('mainService', function($http) {
        return {
            login : function(username, userpassword) {
                return $http.post('/user/login', {name: username}, {password: userpassword}).then(function(response) {
                    return response.data.token;
                });
            },

我有一些带有内部类的控制器

@SuppressWarnings("unused")
    private static class UserLogin {
        public String name;
        public String password;
    }

和方法 login()

 @RequestMapping(value = "login", method = RequestMethod.POST)
public LoginResponse login(@RequestBody final UserLogin login)
    throws ServletException {
    System.out.println(login.name + login.password);//

这里 login.name = 我在网页中写的(登录)和 login.password 总是 = null。 我做错了什么?

【问题讨论】:

  • 你省略了相关代码:mainService.login.
  • 取决于您发送数据的方式...默认 $http 使用内容类型 application/json 而不是表单编码。显示服务方式
  • 添加到问题中
  • 您需要更改发送的 contentType 或接收请求正文为 json
  • 是的,当我将类型密码更改为文本时 - 它可以工作,但密码不应该是可见的

标签: javascript java html angularjs


【解决方案1】:

它不起作用的原因是您的 POST 调用将密码作为$http.post 中的配置参数传递。您的密码应该是数据参数对象的一部分: $http.post('/user/login', {name: username, password: userpassword})

【讨论】:

    【解决方案2】:

    登录功能必须改成这样:

    login : function(username, userpassword) { return $http.post('/user/login', {name: username, password: userpassword}).then(function(response) { return response.data.token; });
    

    【讨论】:

    • 我在我看到登录名和密码值的问题中添加了
    • 好的,查看 chrome 网络选项卡,查看单击登录按钮时发送的数据。这可能会为您提供有关客户端发送到服务器的内容的线索。这应该有助于进一步调试。
    • 和OP代码有什么区别?应该解释发生了什么变化以及为什么......不仅仅是like this。适当的缩进也会使这变得可读。我看不出这如何解决 OP 服务器端问题
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多