Как вызвать метод класса в JSP? - PullRequest
0 голосов
/ 09 мая 2019

Я знаю, что этот вопрос задавался много раз, я проверял предыдущие вопросы, и ни один из них не удовлетворял моим потребностям. Я новичок в JSP, но давний разработчик Java. Я googled о различных способах совершать сетевые вызовы с JSP file и множественные пришли, но, поскольку JSP является потомком Java Я хотел воспользоваться этим преимуществом и сделать что-то совершенно другое, я использовал Retrofit для сетевых вызовов с rxJava.

Я сделал интерфейс класса

public interface APIService {
  @GET("getprofiles")
  Single<List<UserProfileRole>> getProfileRoles();
}

A Retrofit класс инициализатора

public class RetrofitService {

  public static Retrofit getRetrofit() {

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(15, TimeUnit.SECONDS)
            .readTimeout(15, TimeUnit.SECONDS)
            .addInterceptor(interceptor)
            .build();

    return new Retrofit.Builder()
            .baseUrl(Constants.API)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(client)
            .build();
   }
}

И наконец NetworkCallManager класс

public class NetworkCallManager {

  public static Single<List<UserProfileRole>> getAllUserProfiles(){
    List<UserProfileRole> mUserProfileRoles = new ArrayList<>();
    APIService service = RetrofitService.getRetrofit().create(APIService.class);
    return service.getProfileRoles();
  }
}

Моя идея - вызвать метод NetworkCallManager.getAllUserProfiles(), который возвращает Single, поэтому в моем JSP я делаю что-то вроде

<%@ page import="manager.NetworkCallManager" %>
<%@ page import="java.util.List" %>
<%@ page import="models.UserProfileRole" %>
<%@ page import="io.reactivex.SingleObserver" %>
<%@ page import="io.reactivex.disposables.Disposable" %><%--
Document   : newuserprofiletype
Created on : May 6, 2019, 4:12:01 PM
Author     : aubry
--%>

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%!

NetworkCallManager.getAllUserProfiles()
    .subscribe(new SingleObserver<List<UserProfileRole>>() {

      @Override
      public void onSubscribe(Disposable disposable) {
      }

      @Override
      public void onSuccess(List<UserProfileRole> userProfileRoles) {
        //Set result to page
      }

      @Override
      public void onError(Throwable throwable) {
      }
    });

%>

Моя единственная проблема - когда я звоню NetworkCallManager.getAllUserProfiles() intelliJ дает мне Cannot resolve symbol getAllUserProfiles, но при наборе ManagerCallManager. intelliJ даже автозаполнение для меня. Как мне разрешить функцию?

1 Ответ

0 голосов
/ 09 мая 2019

Ну, решение душераздирающее, так что оказалось, что я использовал неправильные теги

<%!Мой код здесь%> `

Вместо

<% My code here %>

И теперь мой код работает.

...