【问题标题】:RequestScoped JSF CDI bean with Bootstrap modal带有 Bootstrap 模式的 RequestScoped JSF CDI bean
【发布时间】:2013-10-26 17:21:19
【问题描述】:

我正在使用带有 Bootstrap 3 框架的 JSF 2.0。一切似乎都工作正常,但是当我想从 RequestScoped CDI bean 填充 Bootstrap 模式中的表单时遇到问题。在我看来,在调试之后,bean 是在加载模式页面时实例化的,而不是在打开模式时实例化的。因此,当我打开模式时,bean 不再存在。这是我的一些代码:

这是我打开模式的地方

<li><a href="#editModal" data-toggle="modal"><span class="glyphicon glyphicon-edit"></span> &nbsp;Rediger bruker</a></li>

这是模态内容,在同一页面上。农夫是豆子的名字

<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">Endre bruker</h4>
            </div>
            <div class="modal-body">
                <div class="well">
                    <ul class="nav nav-tabs">
                        <li class="active"><a href="#profile" class="" data-toggle="tab">Profil</a></li>
                        <li><a href="#password" class="" data-toggle="tab">Passord</a></li>
                        <li><a href="#reference" class="" data-toggle="tab">Referanseperson</a></li>
                    </ul>

                    <div class="tab-content">
                        <div class="tab-pane active" id="profile">
                            <h:form class="form-horizontal form-group">
                                <fieldset>
                                    <div class="input-group">
                                        <h:outputText id="email" class="form-control" value="#{farmer.theFarmer.email}"/>

有什么方法可以防止 bean 在页面加载时构建,而是在实际表单呈现时构建?

在网上找了很久,但我似乎找不到任何对我有帮助的东西。

【问题讨论】:

  • 不,这是不可能的。
  • @LuiggiMendoza 还有其他方法可以解决这个问题吗?我知道我以前使用过 ViewScopes,但是对于 CDI,我必须改用 ConversationScope。当我打开模式时是否可以开始对话?我真的不知道该怎么做

标签: jsf modal-dialog twitter-bootstrap-3 cdi


【解决方案1】:

您可以使组件延迟加载,以便在新的 HTTP 请求上检索内容。假设您使用诸如 primefaces 之类的东西,您可以使用 p:fragment。如果您使用 RichFaces,则可以使用 Rich:outputPanel。只需确保将这两个设置为重新渲染即可。

您还可以使用诸如 JSF panelGrid 之类的低级别,并根据 AJAX 调用重新呈现它。

【讨论】:

  • 如果我将选项与 JSF panelGrid 一起使用,我会将此 AJAX 调用放在打开模式的链接中,对吗?而且我想我必须使用 标签以外的东西?
  • 是的,您需要在 a 标签中调用一些与 JSF 交互的 javascript。是的,基本上将整个模式包装在一个 JSF 标记中来做到这一点。
猜你喜欢
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2016-06-08
  • 2019-08-04
  • 2013-11-22
  • 1970-01-01
相关资源
最近更新 更多