gpt4 book ai didi

java - 无法使用 Vaadin 导航器进行重定向

转载 作者:行者123 更新时间:2023-12-02 12:13:50 24 4
gpt4 key购买 nike

我有一个非常奇怪的行为,我认为我有两个问题,我将它们放在同一篇文章中,因为它们可以链接:

我的代码是:

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

<强>1。第一期

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

如果我删除带有 vaadinSession 的行,则导航器正在工作...

<强>2。第二期

我尝试调试我的代码,但收到“找不到源”消息,为了解决这个问题,我按照 Eclipse java debugging: source not found 操作。但是,似乎对我有用。我做了什么:

  • 我重新创建了一个新工作区,但没有成功。
  • 我编辑了源查找路径,其中有我的 java 项目
  • 在首选项 -> java -> 安装 JRE -> 我有 1.8.0 JDK
  • 右键单击项目 -> maven -> 下载源
  • 右键单击项目 -> maven -> 禁用 maven 性质,然后配置 -> 项目到 maven

编辑:问题 2 的解决方案: 我被阻止了......我知道这是一个 eclipse 问题(配置或类似的问题)。我换成了IntelliJ。这个 IDE 可以毫无问题地向我显示源代码。

信息

我正在使用 Vaadin 和 REST Web 服务(使用 javax.ws.rs.client.ClientBuilder)。当我使用 SYSOUT 时,我有很好的信息。我从主页收到信息(而不是 View 似乎保留登录 View )。

任何提示都会非常有用!

<小时/>

编辑:完整的 LoginView 类

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;
}

}

主页 View :

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 中不起作用,我有源代码,但在 Debug模式下,我看不到它们。我换成了IntelliJ。我找不到任何有关 Vaadin session 保留字的信息。如果有人找到链接或其他东西,我非常感兴趣!

花太多时间尝试修复它..

非常感谢@jay,他试图帮助我!

关于java - 无法使用 Vaadin 导航器进行重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46340720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com