Primefaces p:tabMenu 将 p:menuitem 向右对齐

Posted

技术标签:

【中文标题】Primefaces p:tabMenu 将 p:menuitem 向右对齐【英文标题】:Primefaces p:tabMenu align p:menuitem to right 【发布时间】:2017-01-30 12:56:52 【问题描述】:

我正在使用带有 JDK 1.8、Maven 和 Primefaces 的 Java EE。关于 Primefaces 的tabMenu,我有以下问题: 如何将最后一个菜单项向右对齐? 请参阅下面的代码:

<p:tabMenu activeIndex="#param.i">
    <p:menuitem value="Login" outcome="/Person/PersonLogin.xhtml"
          icon="fa fa-sign-in"
          rendered="#!personModel.personLoggedIn()">
       <f:param name="i" value="#(!personModel.personLoggedIn())?0:99"/>
    </p:menuitem>
    <p:menuitem value="Register" outcome="/Person/PersonRegistration.xhtml"
          icon="fa fa-user-plus"
          rendered="#!personModel.personLoggedIn()">
       <f:param name="i" value="#(!personModel.personLoggedIn())?3:95"/>
    </p:menuitem>
    <p:menuitem value="#personModel.usedAccount.balanceFormatted"
          outcome="/Overviews/TransactionOverview.xhtml"
          style="float:right; margin-right: 30px; #personModel.usedAccount.balance >=0 ? 'color:green;' : 'color:red;'"
          rendered="#personModel.personLoggedIn()">
       <f:param name="i" value="#(personModel.personLoggedIn())?123:94"/>
   </p:menuitem>
</p:tabMenu>

最后一个菜单项中的这段代码 sn-p style="float:right; margin-right: 30px; #personModel.usedAccount.balance &gt;=0 ? 'color:green;' : 'color:red;'" 仍然没有在右侧对齐:

目前的输出如下: 虽然它应该看起来像这样:

【问题讨论】:

【参考方案1】:

我刚刚检查了 primefaces 使用的 css。而且我看到您的 css 代码用于 &lt;a&gt; 元素而不是外部 &lt;li&gt; 元素。当我手动将您的 css 添加到外部 &lt;li&gt; 元素时,它可以按您的意愿工作。您需要找到一种方法将您的 css 添加到外部 &lt;li&gt;

或者,你可以使用

&lt;p:panelGrid columns="2" layout="grid" columnClasses="ui-grid-col-10,ui-grid-col-2&gt;

第一个元素是你的&lt;p:tabMenu&gt; 元素,没有最后一个&lt;p:menuitem&gt;

第二个可以是&lt;p:commandLink&gt; 元素

<p:panelGrid columns="2" layout="grid" columnClasses="ui-grid-col-10 tabMenucssclass,ui-grid-col-2 commandlinkcssclass> <p:tabMenu></p:tabMenu> <p:commandLink></p:commandLink> </p:panelGrid>

查看 primefaces panelGrid 元素

更新 - 这不是为了得分,只是为了回答你应该接受@Kukeltje 回答

.flo .ui-tabmenuitem:last-childfloat: right;
<p:tabMenu class="flo"></p:tabMenu>

【讨论】:

我想我会试试这个;) 我更新了我的答案。我添加了您可以使用的面板网格草稿和列类;) 这可行,但looks quite ugly :D 是的,您需要编写一些 css 命令linkcssclass :) 顺便说一下@Kukeltje 的回答可能会对您有所帮助。我会测试它 你是对的 :D 我混合了两种解决方案,现在看起来很糟糕 :D 但我会尝试解决这个问题。【参考方案2】:

对我来说,以下作品(在 6.0.x 的 PF 展示中测试)

.ui-tabmenuitem:last-child 
  float: right !important;

虽然最好不要使用 !important 并查看是否将 styleClass 添加到 menuItem 或 tabMenu 并在您的选择器中使用它(没有时间尝试,抱歉)。

更新: 正如@mismanc 和 OP 发现的那样,tabMenu 不支持styleClass 或相关,但class 支持。因此,如果您不想在每个选项卡菜单上都使用它

<p:tabMenu class="flo">
   ...
</p:tabMenu>

并使用选择器中的类

.flo .ui-tabmenuitem:last-child 
    float: right;

【讨论】:

添加样式类不起作用,不支持添加containerStyle:github.com/primefaces/primefaces/issues/1450... 感谢您的调查。所以在不远的将来(pf 6.1)它将被支持 是的 ;) 但是您的解决方案现在也可以正常工作。和mismanc一起我想通了。

以上是关于Primefaces p:tabMenu 将 p:menuitem 向右对齐的主要内容,如果未能解决你的问题,请参考以下文章

将 p:tabMenu 与 JavaScript 一起使用

正在准备中的选项卡菜单

如何将PrimeFaces p:selectManycheckbox值插入数据库

Primefaces p:graphicImage 动态内容无法加载 404

PrimeFaces p:tree使用自定义图标

将 primefaces 数据表与 org.primefaces.component.datatable.DataTable 绑定;