Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用Vaadin导航器重定向_Java_Eclipse_Rest_Vaadin_Webservice Client - Fatal编程技术网

Java 无法使用Vaadin导航器重定向

Java 无法使用Vaadin导航器重定向,java,eclipse,rest,vaadin,webservice-client,Java,Eclipse,Rest,Vaadin,Webservice Client,我有一个非常奇怪的行为,我想我有两个问题,我把它们放在同一个帖子上,因为它们可以链接: 我的代码是: VaadinSession.getCurrent().setAttribute("user", user); System.out.println("User :"+ user); getUI().getNavigator().navigateTo(HomePageView.HOMEPAGE); 1。第一期 我在登录页面上,我可以看到我的用户信息,但我无法导航到主页。 我没有任何错误 如果我删

我有一个非常奇怪的行为,我想我有两个问题,我把它们放在同一个帖子上,因为它们可以链接:

我的代码是:

VaadinSession.getCurrent().setAttribute("user", user);
System.out.println("User :"+ user);
getUI().getNavigator().navigateTo(HomePageView.HOMEPAGE);
1。第一期

我在登录页面上,我可以看到我的用户信息,但我无法导航到主页。 我没有任何错误

如果我删除带有Vaadin会话的行,导航器正在工作

2。第二期

我试图调试我的代码,但我收到了一个“未找到源代码”,为了解决这个问题,我遵循。但是,似乎对我有用。 我所做的:

  • 我重新创建了一个新的工作区,但没有成功
  • 我编辑了源代码查找路径,其中有我的java项目
  • 在preferences->java->installedjres->1.8.0jdk中
  • 右键单击项目->maven->下载源代码
  • 右键单击项目->maven->禁用maven nature,然后单击Configure->project to maven
编辑:问题2的解决方案: 我被封锁了。。。我知道这是一个eclipse问题(配置或类似的问题)。我换了IntelliJ。这个IDE可以毫无问题地显示源代码

信息

package com.test.project.restclient;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.client.ClientConfig;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.test.project.model.User;


/**
 * Class contain the Rest Client which allow to use and call the rest web services.
 * 
 * @author Bob
 */
public class RestClient {

    private static final String EMAIL_LABEL = "email";
    private static final Logger LOG = LoggerFactory.getLogger(RestClient.class);

    private Client client;

    public RestClient() {
        client = ClientBuilder.newClient(new ClientConfig());
    }

    /**
     * Get the user information from the user email
     * 
     * @param email
     * @return user
     */
    @SuppressWarnings("unchecked")
    @POST
    @Path("http://IpAddress:8080/api/authentication/")
    public User getUserInfo(String email) {
        JSONObject obj = new JSONObject();
        obj.put(EMAIL_LABEL, email);

        WebTarget webtarget = client.target("http://IpAddress:8080/api/authentication/");

        Response response = webtarget.request().accept(MediaType.APPLICATION_JSON).post(Entity.entity(obj, MediaType.APPLICATION_JSON));

        String answer = response.readEntity(String.class);
        LOG.info("User information are :" + answer);
        Gson g = new Gson();
        User user = g.fromJson(answer, User.class);
        return user;
    }

}
package com.test.project.View;

import com.test.project.model.Action;
import com.test.project.restclient.RestClient;
import com.vaadin.data.Binder;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.VaadinSession;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;


/**
 * Home page view.
 *
 * @author Bob
 */
public class HomePageView extends CustomComponent implements
        View {

    private static final long serialVersionUID = 1L;
    public static final String HOMEPAGE = "home";

    private final VerticalLayout layout;

    private static final String TOKEN_ATTRIBUTE_LABEL = "token";

    /**
     * Home page View constructor
     */
    public HomePageView() {
        layout = new VerticalLayout();
        layout.setSizeFull();
        String CURRENT_USER_TOKEN = (String) VaadinSession.getCurrent().getAttribute(TOKEN_ATTRIBUTE_LABEL);
        System.out.println("Current user token : " + CURRENT_USER_TOKEN);
        createMenu();

        setCompositionRoot(layout);
    }

    /**
     * Create a Vertical Menu with the Home page and Actions page
     */
    private void createMenu() {
        MenuBar barmenu = new MenuBar();
        barmenu.addItem("Homepage", VaadinIcons.HOME, null);
        barmenu.addItem("Actions", VaadinIcons.TABLE, null);
        layout.addComponent(barmenu);
    }


    /* (non-Javadoc)
     * @see com.vaadin.navigator.View#enter(com.vaadin.navigator.ViewChangeListener.ViewChangeEvent)
     */
    @Override
    public void enter(ViewChangeEvent event) {

    }

}
我正在使用Vaadin和RESTWeb服务(使用javax.ws.rs.client.ClientBuilder)。 当我使用SYSOUT时,我得到了很好的信息。我从主页上收到了信息(而不是视图似乎保留了登录视图)

任何提示都将非常有用


编辑:完整登录视图类

package com.test.project.View;

import com.test.project.model.User;
import com.test.project.restclient.RestClient;
import com.vaadin.annotations.Title;
import com.vaadin.data.Binder;
import com.vaadin.data.validator.EmailValidator;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.VaadinSession;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;


    /**
     * Login View. The user should enter his email address. Extends {@link CustomComponent} and implements {@link View}
     * 
     * @author Bob
     */
    @Title("Sign Up")
    public class LoginView extends CustomComponent implements
            View {

        private static final long serialVersionUID = 1L;

        public static final String LOGIN = "";

        private VerticalLayout vLayout = new VerticalLayout();

        private static final String SIGNUP_LABEL = "Sign Up";
        private static final String EMAIL_CAPTION = "Type your email here :";
        private static final String SIGNIN_LABEL = "Sign In";
        private TextField email;
        private static final String TOKEN_ATTRIBUTE_LABEL = "token";

        private final Binder<User> binder = new Binder<>();
        private User user;

        private Button loginButton;

        /**
         * Login view Constructor
         */
        public LoginView() {
            createLoginPanel();
            addListener();
        }

        /**
         * Add Listener concern by the Login View Fields
         */
        private void addListener() {
            loginButton.addClickListener(e -> {
                RestClient rc = new RestClient();
                user = rc.getUserInfo(email.getValue());
                VaadinSession.getCurrent().setAttribute(TOKEN_ATTRIBUTE_LABEL, user.getToken());
                System.out.println();
                getUI().getNavigator().navigateTo(HomePageView.HOMEPAGE);
            });
        }

        /**
         * Create the login panel with the email field and the login button
         */
        private void createLoginPanel() {
            final VerticalLayout layout = new VerticalLayout();
            layout.setSizeFull();

            Panel panel = new Panel(SIGNUP_LABEL);
            panel.setHeight(200, Unit.PIXELS);
            panel.setWidth(300, Unit.PIXELS);

            email = new TextField();
            email.setCaption(EMAIL_CAPTION);
            email.setHeight(30, Unit.PIXELS);
            email.setWidth(275, Unit.PIXELS);
            binder.forField(email).withValidator(new EmailValidator("This doesn't look like a valid email address")).bind(User::getEmail, User::setEmail);

            loginButton = new Button(SIGNIN_LABEL);
            loginButton.setIcon(VaadinIcons.SIGN_IN);

            layout.addComponents(email, loginButton);
            layout.setComponentAlignment(loginButton, Alignment.BOTTOM_RIGHT);

            panel.setContent(layout);

            vLayout.addComponent(panel);
            vLayout.setSizeFull();
            vLayout.setComponentAlignment(panel, Alignment.MIDDLE_CENTER);
            setCompositionRoot(vLayout);
        }

        /* (non-Javadoc)
         * @see com.vaadin.navigator.View#enter(com.vaadin.navigator.ViewChangeListener.ViewChangeEvent)
         */
        @Override
        public void enter(ViewChangeEvent event) {
            email.focus();
        }
    }
主页视图:

package com.test.project.restclient;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.client.ClientConfig;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.test.project.model.User;


/**
 * Class contain the Rest Client which allow to use and call the rest web services.
 * 
 * @author Bob
 */
public class RestClient {

    private static final String EMAIL_LABEL = "email";
    private static final Logger LOG = LoggerFactory.getLogger(RestClient.class);

    private Client client;

    public RestClient() {
        client = ClientBuilder.newClient(new ClientConfig());
    }

    /**
     * Get the user information from the user email
     * 
     * @param email
     * @return user
     */
    @SuppressWarnings("unchecked")
    @POST
    @Path("http://IpAddress:8080/api/authentication/")
    public User getUserInfo(String email) {
        JSONObject obj = new JSONObject();
        obj.put(EMAIL_LABEL, email);

        WebTarget webtarget = client.target("http://IpAddress:8080/api/authentication/");

        Response response = webtarget.request().accept(MediaType.APPLICATION_JSON).post(Entity.entity(obj, MediaType.APPLICATION_JSON));

        String answer = response.readEntity(String.class);
        LOG.info("User information are :" + answer);
        Gson g = new Gson();
        User user = g.fromJson(answer, User.class);
        return user;
    }

}
package com.test.project.View;

import com.test.project.model.Action;
import com.test.project.restclient.RestClient;
import com.vaadin.data.Binder;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.VaadinSession;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;


/**
 * Home page view.
 *
 * @author Bob
 */
public class HomePageView extends CustomComponent implements
        View {

    private static final long serialVersionUID = 1L;
    public static final String HOMEPAGE = "home";

    private final VerticalLayout layout;

    private static final String TOKEN_ATTRIBUTE_LABEL = "token";

    /**
     * Home page View constructor
     */
    public HomePageView() {
        layout = new VerticalLayout();
        layout.setSizeFull();
        String CURRENT_USER_TOKEN = (String) VaadinSession.getCurrent().getAttribute(TOKEN_ATTRIBUTE_LABEL);
        System.out.println("Current user token : " + CURRENT_USER_TOKEN);
        createMenu();

        setCompositionRoot(layout);
    }

    /**
     * Create a Vertical Menu with the Home page and Actions page
     */
    private void createMenu() {
        MenuBar barmenu = new MenuBar();
        barmenu.addItem("Homepage", VaadinIcons.HOME, null);
        barmenu.addItem("Actions", VaadinIcons.TABLE, null);
        layout.addComponent(barmenu);
    }


    /* (non-Javadoc)
     * @see com.vaadin.navigator.View#enter(com.vaadin.navigator.ViewChangeListener.ViewChangeEvent)
     */
    @Override
    public void enter(ViewChangeEvent event) {

    }

}

好的,我找到了问题的解决方案/工作区:

  • 对于第一个问题:“token”似乎是一个保留词,“tokenEmployee”似乎更好,而且它工作得很好

  • 对于第二个问题:我仍然不知道为什么它不能在Eclipse中工作,我有源代码,但在调试模式下,我无法看到它们。我换了IntelliJ。我找不到任何关于瓦丁会议保留词的东西。如果有人找到一个链接或什么,我很感兴趣

花了太多时间试图修复它


多亏@jay帮了我一把

您能否发布处理登录操作的完整代码?可能您在
try
块中捕获异常并隐藏/删除它?@jay我没有任何错误消息…@Morfic,我添加了登录视图,我将添加RestClient tooVaadinSession.getCurrent将返回'com.vaadin.server'。VaadinSession@58d3734c'在setAttribute之前。我很迷路…是的,我能看到你的答案,很高兴你找到了解决办法!