두 컨트롤러 (클래스)가 있습니다. 그들 중 하나에서 나는 요청을하고 결과 데이터를 다른 컨트롤러로 전송하고 싶습니다. 하지만 여하튼 빈 목록 만 반환합니다.컨트롤러에서 데이터를 가져 오는 방법은 무엇입니까?
package controllers;
import com.querydsl.core.Tuple;
import com.querydsl.jpa.impl.JPAQueryFactory;
import models.*;
import play.db.jpa.JPAApi;
import play.db.jpa.Transactional;
import play.mvc.Controller;
import play.mvc.Result;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import static java.util.Collections.addAll;
public class TestingController extends Controller {
private JPAApi jpaApi;
@Inject
public TestingController(JPAApi jpaApi) {
this.jpaApi = jpaApi;
}
private static ArrayList<ArrayList<Object>> listOfLists = new ArrayList<>();
@Transactional
public Result resolving_requests() {
QClaim claim = QClaim.claim;
QFinancialClaimData financialClaimData = QFinancialClaimData.financialClaimData;
QDate_diff date_diff=QDate_diff.date_diff;
EntityManager em=jpaApi.em();
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
//QUERY1: Costs and amounts of different claims for the last year
String columns[] = {"Month, Year", "Type of risk", "Risks count", "Risks amount"};
List<Tuple> q1=queryFactory.select(claim.typeOfRisk, financialClaimData.overAllAmount.sum(), claim.claimDate_finish.count(), claim.claimDate_start.month(), claim.claimDate_start.year())
.from(claim)
.where(claim.claimDate_start.year().gt(LocalDate.now().getYear()-2).and(claim.claimDate_start.month().gt(LocalDate.now().getMonthValue())).or(claim.claimDate_start.year().eq(LocalDate.now().getYear())))
.groupBy(claim.typeOfRisk, claim.claimDate_start.month(), claim.claimDate_start.year())
.orderBy(claim.claimDate_start.year().asc(), claim.claimDate_start.month().asc(), claim.typeOfRisk.asc())
.fetch();
ArrayList<Object> singleList = new ArrayList<>();
addAll(singleList, columns); //Adding all columns' names to the first row, simailar to foreach
this.listOfLists.add(singleList);
for (Tuple l: q1){
singleList = new ArrayList<>();
singleList.add(l.get(claim.claimDate_start.month()).toString() + "/" + l.get(claim.claimDate_start.year()).toString());
singleList.add(l.get(claim.typeOfRisk));
singleList.add(l.get(claim.claimDate_finish.count()));
singleList.add(l.get(financialClaimData.overAllAmount.sum()));
this.listOfLists.add(singleList);
}
System.out.println(listOfLists);
for (List i: listOfLists){
for (Object i_inner: i){
System.out.print(i_inner+"|"); //That works fine and I see a result
}
System.out.print("\n");
}
return ok("Your new application is ready.");
}
public static ArrayList<ArrayList<Object>> get_arr_list() {
return listOfLists; //Probably that returns empty list
}
}
제 2 제어부, 즉 ArrayList를 수신한다 : 요청하는 데이터 전송 우선 컨트롤러 패키지 컨트롤러;
import com.fasterxml.jackson.databind.JsonNode;
import play.mvc.*;
import java.util.ArrayList;
public class ReportsController extends Controller {
public Result generating_reports(){
ArrayList<ArrayList<Object>> listOfLists = TestingController.get_arr_list();
System.out.println("Here should be a list: "+listOfLists); //This returns an empty list []
return ok("All is ready!");
}
}
어떻게 해결할 수 있습니까?
문제를 설명하는 데 필요한 최소 [MCVE]는 어떨까요? – c0der
@Bogdan'resolveing_requests()'가 http 요청이나 혼자서 호출에 의해 실행되지 않는다면 그리스트는 비어있을 것입니다 ... 또한 정적 ArrayList는 동시 설정에서 많은 문제를 줄 것입니다 ... – Salem
@Salem 어떻게 실행할 수 있습니까? –