gpt4 book ai didi

JSF2.0 在使用 commandButton 时如何将 viewParam 传递到请求范围的支持 bean?

转载 作者:行者123 更新时间:2023-12-02 09:46:34 25 4
gpt4 key购买 nike

我有以下页面:

 <?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,我似乎都无法绑定(bind)returnTo。由于这是一个登录页面,我真的希望 LoginMB 成为 @ViewScoped bean。

建议?有没有更好的方法来处理这种情况?

编辑:

  • 我在 TomEE+ Server v1.5.1 上运行此程序,该服务器由 MyFaces 2.1.10 提供服务
  • 添加了整页
  • 澄清了问题:在 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>确实是强制性的,您需要以相同的形式在所有命令链接和按钮上复制粘贴相同的内容。

关于JSF2.0 在使用 commandButton 时如何将 viewParam 传递到请求范围的支持 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419701/

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