Я пытаюсь внедрить процесс входа в Twitter. Во время процесса регистрации пользователь должен быть перенаправлен на веб-сайт Twitter, чтобы ввести свои учетные данные, а затем он будет перенаправлен на мой URL-адрес веб-сайта. Перед первой перенаправлением экземпляр объекта RequestToken (библиотека Twitter4J) должен храниться и сохраняться между запросами.@ConversationScope bean не сохраняет ссылочные значения
Для этого я решил использовать ConverstaionScoped bean, но, к сожалению, значения ссылок не сохраняются между запросами.
Вот мои JSF страницы:
twitter.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
>
<f:event listener="#{twitterLoginPageController.login()}" type="preRenderView" />
</html>
twitterRedirect.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
>
<f:event listener="#{twitterLoginPageController.onRedirect(param.oauth_token, param.oauth_verifier)}" type="preRenderView" />
</html>
Мой Twitter Войти контроллер:
@Named
@ConversationScoped
public class TwitterLoginPageController implements Serializable {
@Inject
private Conversation conversation;
// These objects should be retained between requests
Twitter twitter;
RequestToken requestToken;
public void login() {
try {
twitter = new TwitterFactory().getInstance();
requestToken = twitter.getOAuthRequestToken("...");
conversation.begin();
conversation.setTimeout(30000);
// Navigate to Twitter here
} catch (TwitterException ex) {
...
}
}
public void onRedirect(String oauthToken, String oauthVerifier) {
try {
// twitter reference is null here
twitter.getOAuthAccessToken(requestToken, oauthVerifier);
...
} catch (TwitterException e) {
...
} finally {
conversation.end();
}
}
}
кажется мне, что я следую примеры использования @ConverstaionScope тесно, но я не могу получить ожидаемый результат. Что делать, чтобы сохранить объекты между запросами?
Отлично! Это решило мою проблему! Используя API Twitter, вы можете указать параметры в URL-адресе обратного вызова, например: requestToken = twitter.getOAuthRequestToken (".../twitterRedirect.xhtml? Cid =" + convers.getId()); –
@ IvanMushketyk Я так и думал, но не хотел предполагать. Рад, что это помогло! – rdcrng