如何使用Struts2项目中action类的angular $ http.get()获取数据

时间:2015-10-06 06:55:27

标签: angularjs

我正在使用angular和struts2 + maven开发项目。 这是我的动作类

package com.ai.action;

import com.ai.model.PersonData;
import com.ai.model.Village;
import com.ai.service.PersonService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AngularAction implements Action {

private Map session = ActionContext.getContext().getSession();
private Logger logger = LoggerFactory.getLogger(PersonAction.class);

private List<Village> STSarray;
@Autowired
private PersonService  personService;

public String execute()
{
    List<Village> STSarray = personService.getAllVillage();

    logger.info("save method {}",getSTSarray());
    return SUCCESS;
}

public List<Village> getSTSarray() {
    return STSarray;
}

public void setSTSarray(List<Village> STSarray) {
    this.STSarray = STSarray;
}

}

这里我将数据加载到     名单
使用DAO和hibernate。数据已成功添加到阵列。 然后我想把这些数据发送到jsp页面。

struts.xml中

    <action name="angularAction" class="com.ai.action.AngularAction">
        <result type="json">
            <param name="root">personData</param>
            <param name="excludeNullProperties">true</param>
            <param name="noCache">true</param>
        </result>
    </action>

这是我的jsp页面。

<!DOCTYPE html>
<html ng-app="demo">
<head>
<meta charset="ISO-8859-1">
<title>AJAX with Struts 2 using AngularJS</title>
<link href="css/bootstrap.css" rel="stylesheet" />
<link href="css/bootstrap-theme.css" rel="stylesheet" />
<script type="text/javascript" src="scripts/angular.min.js"></script>
    <script type="text/javascript">


    angular.module("demo", [])
            .controller("demoCtrl", function ($scope, $http) {

                $scope.loadData = function () {

                    $http.get("angularAction").success(function (data) {

                        $scope.person = data;
                        console.log($scope.person);
                    });
                }
            });

</script>
</head>
<body ng-controller="demoCtrl">
<table class="table table-striped">
<p><button data-ng-click="loadData()">
    Fetch data from server
</button></p>
<thead>
<tr>
    <th>Country</th>
    <th>Name</th>
    <th>Size</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in person">
    <td>{{item.country}}</td>
    <td>{{item.name}}</td>
    <td>{{item.size}}</td>
</tr>
</tbody>
 </table>
 </body>
</html>

但是     的console.log($ scope.person); 给我null.please帮助。

但是当我的动作类在下面给出时它正常工作。

public class AngularAction implements Action{

//private PersonData personData = new PersonData();
private List<Village> Setstow =new ArrayList<Village>();
private Village village = new Village();
private Map session = ActionContext.getContext().getSession();
private Logger logger = LoggerFactory.getLogger(AngularAction.class);
private PersonData personData = new PersonData();

public String execute() {

    personData.setFirstName("Mohaideen");
    personData.setLastName("Jamil");
    return SUCCESS;
}

public PersonData getPersonData() {
    return personData;
}

public void setPersonData(PersonData personData) {
    this.personData = personData;
}

根据我的想法,请告诉我如何使用$ http.get(“angularAction”)获取Action类中的List STSarray数据.reccess(function(data)。

1 个答案:

答案 0 :(得分:0)

角度代码中有几个错误:

  1. 检查“angularAction”是否为正确的网址。这将指向http://yourserver/jsplocation/angularAction之类的东西。例如,如果您的jsp位于http://localhost/pages/page.jsp,则通话将为http://localhost/pages/angularAction 最重要的是,你的angularAction是否以JSON方式返回数组?您可以直接在浏览器中键入angularAction的URL并查看结果

  2. 来检查
  3. 在您设置$scope.itemsdata=data;的成功函数中,然后调用console.log($scope.person);,这是一个从未在代码中设置的不同变量

  4. 您从未在模块内设置控制器。试试这个

    var MyController=function ($scope, $http) {
    $scope.getDataFromServer = function() {
        $http.get("angularAction").success(
            function(data, status, headers, config) {
                $scope.itemsdata = data;
                console.log($scope.itemsdata);
            }).error(function(data, status, headers, config){});
        };
    };
    
    app.controller('demoCtrl', ["$scope", "$http", MyController]);
    
  5. 在HTML中,您调用“loadData();”但是您在控制器中设置的功能称为“getDataFromServer”

  6. 您在<p>标记内放置了<table>标记(带有按钮的标记)。你应该把它移出去。

  7. 服务器端还有其他错误。您应该在原始代码中将名为STSarray的任何内容称为“personData”,并在“execute”方法中删除类型声明,因为它会使其成为局部变量

    package com.ai.action;
    
    import com.ai.model.PersonData;
    import com.ai.model.Village;
    import com.ai.service.PersonService;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    public class AngularAction implements Action {
    
    private Map session = ActionContext.getContext().getSession();
    private Logger logger = LoggerFactory.getLogger(PersonAction.class);
    
    private List<Village> personData;
    @Autowired
    private PersonService  personService;
    
    public String execute()
    {
        this.personData = personService.getAllVillage();
    
        logger.info("save method {}",getPersonData());
        return SUCCESS;
    }
    
    public List<Village> getPersonData() {
        return personData;
    }
    
    public void setPersonData(List<Village> personData) {
        this.personData = personData;
    }
    
    }
    

    最好使用浏览器的开发人员工具(或更好的,firebug)来检查下次的javascript代码(即使我假设如果你使用console.log(),你知道如何使用你的javascript控制台,但它应该警告你关于丢失的控制器和其他一切)。