繁体   English   中英

JSF2.0如何在使用commandButton时将viewParam传递给请求范围的后备bean?

[英]JSF2.0 how do you pass a viewParam to a request scoped backing bean while using a commandButton?

我有以下页面:

 <?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>

和以下bean:

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

无论我做什么,单击commandButton似乎都无法获得returnTo绑定。 由于这是一个登录页面,所以我真的希望LoginMB成为@ViewScoped bean。

忠告? 有没有更好的方法来处理这种情况?

编辑:

  • 我正在由MyFaces 2.1.10提供服务的TomEE + Server v1.5.1上运行此程序
  • 添加了整页
  • 澄清了问题:在redirect()函数中,returnTo为null

您的<f:metadata><ui:define> ,因此被完全忽略。 <ui:insert name="metadata">到主模板,并将<f:metadata>放在模板客户端的<ui:define name="metadata">中。

也可以看看:


修复此问题后,可以安全地从命令按钮中删除<f:param> <o:form includeViewParams="true">已经完成了这项工作。 如果没有它,那么<f:param>确实是必须的,并且您需要以相同的形式在所有命令链接和按钮上粘贴相同的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM