在 JSF 中使用 Primefaces 和 Bootstrap

Posted

技术标签:

【中文标题】在 JSF 中使用 Primefaces 和 Bootstrap【英文标题】:Using Primefaces and Bootstrap in JSF 【发布时间】:2015-02-11 11:40:54 【问题描述】:

即使现在我在我的项目中使用了 JSF+Primefaces,这给了我很多新的组件(来自 primefaces)来工作。

但是我的新客户需要一个好的管理员面板布局(响应式 + 干净 + 美丽)。在http://themeforest.net/ 中搜索,我发现了很多很棒的布局,但几乎所有内容都是为了引导。

所以,我的疑问是:我可以继续使用 primefaces(利用强大的组件)并使用引导布局吗?有什么限制吗?

【问题讨论】:

也许你可以使用blog.hatemalimam.com/jsf-and-twitter-bootstrap-integration 但是如果我使用这个 twitter-bootstrap-integration 我可以继续使用 primefaces 吗? 以防万一有人读到这个两年前的帖子:我看不出它不应该与 PrimeFaces 一起使用的任何理由。但是,作为 BootsFaces 提交者,我仍然建议使用 BootsFaces 和 PrimeFaces :)。 嗨,Icefaces + Bootfaces 怎么样? 您可以使用 BootsFaces:showcase.bootsfaces.net 【参考方案1】:

我建议将 BootsFaces 与 PrimeFaces 的 Bootstrap 主题一起使用(请参阅 http://showcase.bootsfaces.net/integration/PrimeFaces.jsf)。 BootsFaces 减少了编写 Bootstrap 页面所需的样板代码。另外,它提供了几个小部件,它们比 PrimeFaces 更适合 Bootstrap 页面。我们将 BootsFaces 设计为 PrimeFaces 的插件,因此您可以安全地同时使用两者。

【讨论】:

我认为链接已失效。集成现在是展示的一部分:showcase.bootsfaces.net/integration/PrimeFaces.jsf Primefaces Bootstrap 主题是否仍然适用?该主题的维护者不再存在,最后一次提交是 3 年前 我建议您在 PrimeFaces 问题跟踪器上打开一个问题。我想这个主题是由 Cagatay 自己维护的。无论如何,打开一个问题应该很快就能解决问题。 @StephanRauh 你知道最近有什么方法可以在 PrimeFaces 中尊重 Bootstrap / BootsFaces 主题吗?当您将 PF 数据表与深色 BF 主题混淆时,事情会变得非常混乱......(为恢复这个旧线程道歉)【参考方案2】:

我已经启动了一个名为AdminFaces 的项目。它将 Primefaces 和 Bootstrap 集成到一个名为 admin 的新主题中。这个主题将一些引导样式集成到 primefaces 组件中,如面板、按钮、消息、数据表、选项卡视图等。它还带来了一个基于著名的Admin LTE bootstrap admin 模板的模板。

您可以在这里查看展示:https://adminfaces.github.io/admin-showcase/

该项目处于早期开发阶段(例如:只有快照可用),因此非常欢迎任何反馈或贡献。 版本 1.0.0 已发布,请参阅project blog here 的详细信息。

【讨论】:

【参考方案3】:

Primefaces 和 Bootstrap 很难协同工作。 Bootstrap 定义了一堆用于 html 的 css 类(如导航栏)。但是 primefaces 使用自己的 css 类(如 ui-menubar)来渲染组件。

虽然 Primefaces 提供了一个引导主题,但该主题只是让 primefaces 组件看起来像引导程序的外观。但是这些组件仍然是通过使用 primefaces css 类而不是引导 css 类来呈现的。

【讨论】:

【参考方案4】:

Primefaces 已经有 Primefaces Themes Page 中提到的引导主题

要配置它,你可以关注这个*** discussion

很高兴能提供帮助。

【讨论】:

它基于一个非常旧版本的引导程序,集成很好,如果你想匹配引导程序类,你可以扩展 primefaces 的渲染器并将从 jQuery UI 获取输出的类更改为引导模板。【参考方案5】:

您可以在引导主题的 Portal 中使用 primefaces。你只需要小心设置百分比大小(使用% 而不是px

在大多数情况下,您应该拥有自己的组件,例如 p:panelGrid,大小 = 100%

<!-- If the screen is too narrow to hold both columns they will be aligned verically -->
<p:panelGrid columns="2" style="width:100%;">

    <!-- Left Align -->
    <p:panelGrid columns="1" style="width:85%; text-align:left;">
        ...
    </p:panelGrid>
    <!-- Right Align ( Controls )-->
    <p:panelGrid columns="1" style="width:15%; text-align:right; float:right;">
        ...
    </p:panelGrid>

</p:panelGrid>

我已经成功地将 Primefaces 4.0 驱动的 portlet 与 liferay 6.2(它有一个响应式主题)集成在一起,它运行良好,响应迅速且整洁。

你会在这里和那里遇到一些溢出的对话框和滚动条的麻烦,这些通常受限于固定的像素大小,但它是完全可行的。

您可能还想检查 primefaces Grid CSS

【讨论】:

【参考方案6】:

找了好久我的项目资料整合PrimeFaces + JSF和bootstrap,有人说不可能,但我觉得不太对,鼓励大家去做。

你需要 (modal.js)http://getbootstrap.com/javascript/#modals

private String saludo =""; 
public void mensajito()
  saludo = "Saludos bitacorawil!!!" + new Date();

public String getSaludo() 
  return saludo;

public void setSaludo(String saludo) 
  this.saludo = saludo;

我们的表格将是

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">
 <ui:define name="head">
  <h:outputScript name="bootstrap/js/modal.js" />
 </ui:define>

 <ui:define name="implementation">
  <h:form id="form">
   <p:messages id="messages" closable="true" autoUpdate="true" />
   <div class="panel panel-default">
    <div class="panel-heading">
     <i class="fa fa-angle-right"></i> Criterios de búsqueda
    </div>
    <div class="panel-body">
     <div class="row">
      <div class="form-group has-success col-md-4">
       <p:commandButton value="Generar Saludo modal con JSF" oncomplete="$('#myModal').modal('show');" title="Ver campos" 
        actionListener="#backbeanController.mensajito">
       </p:commandButton>
      </div>
     </div>
    </div>
   </div>

   <p:outputPanel autoUpdate="true">
    <div aria-hidden="true" aria-labelledby="myModalLabel" role="dialog" tabindex="-1" id="myModal" class="modal fade">
     <div class="modal-dialog">
      <div class="modal-content">
       <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">Cerrar</button>
        <h4 class="modal-title">Datos Registro</h4>
       </div>
       <div class="modal-body">
        <h:panelGrid columns="2">
         <h:outputLabel value="Mensaje:" />
         <h:outputText value="#backbeanController.saludo" />
        </h:panelGrid>
       </div>

       <div class="modal-footer centered">
        <button data-dismiss="modal" class="btn" type="button">Cerrar</button>
       </div>
      </div>
     </div>
    </div>
   </p:outputPanel>
  </h:form>
 </ui:define>
</ui:composition>

【讨论】:

请将代码添加到您博客中的帖子中。谢谢! 并添加解释并添加如何不破坏样式:***.com/questions/28183661/… 这个“答案”是整个“问题”中非常非常小的一部分您只使用引导程序“resposinve grid”和模态组件。所有 PF 组件仍然看起来像 PF 而不是 Bootstrap,所以这不是在 JSF 中完全使用带有 PrimeFaces 的 Bootstrap【参考方案7】:

我刚刚测试了 bootfaces,但是当我在平板电脑和手机中打开页面时,字体非常小。我认为,IMO 这并没有为真正的“响应式网页设计”做好准备,可能我必须使用引导程序手动进行..

但是“手动使用引导程序”是从使用 JavaBeans 更改为 RestFul 服务并添加额外的安全层的额外工作......对于一个漂亮的响应式 GUI 来说,工作量相当大!

【讨论】:

以上是关于在 JSF 中使用 Primefaces 和 Bootstrap的主要内容,如果未能解决你的问题,请参考以下文章

在 primefaces 3 和 jsf 中,我上传了文件,但在目标位置没有显示图像

JSF、RichFaces、PrimeFaces 和 IceFaces 之间的区别

使用 JSF2.0 和 Primefaces 3.4 进行导航

使用 JSF 2.0 和 Primefaces 设置项目

关于 JSF 2.0 自定义组件和 Primefaces 的帮助

如何在 Primefaces+JSF2 中显示用户点击的 url