У меня есть следующая страница:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:o="http://omnifaces.org/ui"
xmlns:thehub="http://java.sun.com/jsf/composite/components/thehub"
template="/templates/masterTemplate.xhtml">
<f:metadata>
<f:viewParam
id="returnToViewParam"
name="returnTo"
value="#{loginMB.returnTo}"
required="true" />
<f:viewParam
id="oauth_verifierViewParam"
name="oauth_verifier"
value="#{loginMB.oauth_verifier}" />
<f:viewParam
id="oauth_tokenViewParam"
name="oauth_token"
value="#{loginMB.oauth_token}" />
<f:event
type="preRenderView"
listener="#{loginMB.preRenderView()}" />
</f:metadata>
<ui:define name="body">
<o:form
id="loginForm"
includeViewParams="true">
<div class="form-vertical well">
<h4>New Users</h4>
<h5>
<h:link outcome="signup">Click here to create an account</h:link>
</h5>
<hr />
<h4>Existing Users</h4>
<h:commandButton
id="googleLoginCommandLink"
styleClass="btn"
action="#{loginMB.redirect()}"
value="Google">
<f:param
name="returnTo"
value="#{param.returnTo}" />
</h:commandButton>
<div class="clearfix"></div>
</div>
</o:form>
</ui:define>
</ui:composition>
И следующий бин:
@ManagedBean
@RequestScoped
public class LoginMB implements Serializable {
private static final long serialVersionUID = 1L;
private String returnTo;
public void redirect() {
log.debug("redirect() returnTo:{}", returnTo);
......getter/setters
}
Независимо от того, что я делаю, я не могу связать returnTo после нажатия кнопки commandButton. Поскольку это страница входа в систему, я бы не хотел, чтобы LoginMB был bean-компонентом @ViewScoped.
Совет? Есть ли лучший способ справиться с этим сценарием?
РЕДАКТИРОВАТЬ:
- Я запускаю это на сервере TomEE+ v1.5.1, который обслуживается MyFaces 2.1.10.
- Добавлена полная страница
- Уточнил проблему: внутри функции
redirect()
returnTo имеет значение null
<f:param>
совершенно не нужен, если вы используете<o:form includeViewParams="true">
. Вам это нужно только в том случае, если вы не используете<o:form>
. Чтобы быть уверенным, я даже попробовал это локально, и это работает просто отлично. Ваша конкретная проблема, вероятно, вызвана чем-то еще, что не видно в предоставленной информации. Какую реализацию/версию JSF вы используете? Правильно ли объявлен<f:metadata>
внутри композиции шаблона (и, следовательно, не снаружи)? - person BalusC   schedule 15.03.2013returnTo
? - person Xtreme Biker   schedule 15.03.2013<f:metadata>
внутри<ui:composition>
. Вместо этого попробуйте следующее: место для элемента fmetadata"> stackoverflow.com/questions/9856847/ - person BalusC   schedule 15.03.2013