2

I need to get the value from client side to server side. I am using AngularJS and Struts2 REST.

My controller doesn't get the value passed or am I wrong in passing or using RESTful controller?

Here is my code:

angularcontroller.js:

app.controller('saveAddCatCtrl', function($scope, $http){
    $scope.save = function(newAddCat){
        $http({
            method: "POST",
            url: "api/additionalcategory",
            data: $scope.additionalCategory.addCatName
        }).success(function(data, status, header, config){
            //success
        }).error(function(data, status, header, config){
            //error
        });
}
});

Here is my REST controller:

public class AdditionalcategoryController extends ActionSupport implements ModelDriven<Object>{

private AdditionalCategoryRepository additionalCategoryRepository =
        (AdditionalCategoryRepository)ServletActionContext.getServletContext()
        .getAttribute("additionalCategoryRepository");

private List<AdditionalCategory>            additionalCategories;
public AdditionalCategory                   additionalCategory = new AdditionalCategory();
private int                                 id;

public HttpHeaders index(){
    setAdditionalCategories(additionalCategoryRepository.findAllAdditionalCategory());
    System.out.println("GET api/additionalCategory");
    return new DefaultHttpHeaders("index").disableCaching();
}

public HttpHeaders create(){
    additionalCategoryRepository.createAdditionalCategory(additionalCategory);
    return new DefaultHttpHeaders("create").disableCaching();
}

public void setAdditionalCategories(List<AdditionalCategory> additionalCategories){
    this.additionalCategories = additionalCategories;
}

@Override
public Object getModel() {
    if (additionalCategories == null){
        return additionalCategory;
    }else{
        return additionalCategories;
    }
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public List<AdditionalCategory> getAdditionalCategories() {
    return additionalCategories;
}

public AdditionalCategory getAdditionalCategory() {
    return additionalCategory;
}

public void setAdditionalCategory(AdditionalCategory additionalCategory) {
    this.additionalCategory = additionalCategory;
}

}
Roman C
  • 49,761
  • 33
  • 66
  • 176
Ken Layug
  • 23
  • 1
  • 4

1 Answers1

0

Since angular service http sends JSON, you can send a JSON object using data property. The JSON object will be deserialized to your model class properties because you are using ModelDriven or Action class properties otherwise.

Struts2 REST plugin is made to handle JSON content from the request. It's possible due ContentTypeInterceptor, which is called rest, be able to find JSON handler for the request. The JSON handler is guessed from the Content-Type header or .json extension to the file in the URL. You can use either ways, but second is easier.

Note:

URLs without a file extension the Struts2 REST plugin defaulting to handle xhtml content. So you can modify your code

$http({
    method: "POST",
    url: "api/additionalcategory.json",
    data: {}
}).success(function(data, status, header, config){
    //success
}).error(function(data, status, header, config){
    //error
});

Roman C
  • 49,761
  • 33
  • 66
  • 176