【问题标题】:Adding command button in p:schedule header在 p:schedule 标题中添加命令按钮
【发布时间】:2016-11-03 22:17:06
【问题描述】:

如何在p:schedule 中添加“自定义”按钮?我尝试借助 p:dataTable 组件中的标头方面进行此操作,但无济于事。


很抱歉一开始不清楚,有人通过编辑它的标题来扼杀我的问题也可能没有帮助,这里有更多关于sn-ps代码的细节。

我想做类似的事情:

                    <p:tab title="#{bean.name}" value="bean" >
                        <f:facet name="title">
                            <h:outputText value="#{bean.name}"/>
                            <p:selectBooleanButton styleClass="...">
                                <p:ajax converter="... />
                            </p:selectBooleanButton>
                        </f:facet>
                    </p:tab>

代码正在创建一个选项卡(用于手风琴面板),其中包含一个文本+按钮,而不是仅默认文本。

我在 p:schedule 组件中寻找相同的行为。

<p:schedule value="#{scheduleView.lazyEventModel}" leftHeaderTemplate="today" centerHeaderTemplate="prev, title, next" rightHeaderTemplate="month, agendaWeek" >
        <f:facet name="header">
                <h:outputText value="#{bean.name}"/>
                <p:commandButton styleClass="..."/>
        </f:facet>
</p:schedule>

同样的加个按钮到表头原则,只不过这次按时。当然,由于 schedule 没有任何可用于覆盖的方面,因此这种方法不起作用。 最后,我的问题是:如何在 p:schedule 标题中添加一个按钮,如上图所示?

P.S:请原谅我用datatable 混淆了你们,使用它是因为它支持多个方面(页眉、页脚)。

【问题讨论】:

  • 任何代码示例都将受到高度赞赏,以便找出您的代码中的错误
  • 要更改默认文本,添加一个在 primefaces 展示中可用的脚本:primefaces.org/showcase/ui/data/schedule.xhtml
  • 你在标题里写了datatable,但是在图片和标签里有一个时间表?而且您将两个问题合二为一。请不要那样做。创建具有良好标题和标记的单独问题。请参阅How to Askminimal reproducible examplestackoverflow.com/tags/jsf/info
  • 我已经完全更新了这个问题,如果你仍然不明白这个问题,请告诉我
  • 为什么不直接使用 CSS 来定位按钮?

标签: jsf primefaces schedule


【解决方案1】:

客户端是所有可以用javascript(如果你喜欢jquery)操作的html。

因此,如果您像这样创建时间表和按钮:

<h:panelGroup id="mySchedule">
    <p:schedule value="#{scheduleView.lazyEventModel}" leftHeaderTemplate="today" centerHeaderTemplate="prev, title, next" rightHeaderTemplate="month, agendaWeek"/>

    <h:outputText value="#{bean.name}" id="scheduleOutputText"/>
    <p:commandButton styleClass="..." id="scheduleCommandButton"/>

</h:panelGroup>

您可以使用jquery dom manipulationh:outputTextp:commandButton 移动到日程表中。

$("#scheduleCommandButton").insertBefore(".fc-left");
$("#scheduleOutputText").insertBefore("#scheduleCommandButton");

如果您将此脚本放在 panelGroup 中并在每次通常通过 ajax 更新计划时更新 panelGroup,则应在更新中再次添加按钮和文本。

<h:panelGroup id="mySchedule">
    <p:schedule value="#{scheduleView.lazyEventModel}" leftHeaderTemplate="today" centerHeaderTemplate="prev, title, next" rightHeaderTemplate="month, agendaWeek"/>

    <h:outputText value="#{bean.name}" id="scheduleOutputText"/>
    <p:commandButton styleClass="..." id="scheduleCommandButton"/>

    $("#scheduleCommandButton").insertBefore(".fc-left");
    $("#scheduleOutputText").insertBefore("#scheduleCommandButton");

</h:panelGroup>

您还可以将文本和按钮放在面板组中,并通过 dom 操作来移动它。只要确保你使用了正确的选择器(我没有在上面的选择器前面添加表单 ID)。您还可以使用类选择器代替 id。那取决于你。

但请务必小心使用它。正如@JasperDeVries 在评论中提到的那样,很容易破坏事情。谨慎使用它,并且仅作为最后的手段

【讨论】:

  • 正是我要找的东西,但是无论我选择什么类(fc-toolbar,fc-right),它只会在“计划”组件i.stack.imgur.com/U30Xr.jpg之后显示按钮
  • 那么我怀疑你的选择器是错误的或者它是浏览器依赖的。我在我的(本地)展示中尝试了这个并且它有效。但如果脚本部分需要放在“document ready”中,不妨试试。
  • 发现了问题,因为我使用了一个 tabview 并且计划不是默认选择的选项卡文档。ready 看不到按钮,因为在单击选项卡之前它不会重新呈现,现在我只需要尝试在 tabview 更改时运行此脚本(可能使用 ajax)
  • 赞成,但在操作 DOM 时要小心:很容易破坏东西。
  • @Kukeltje 我会在 10 小时内奖励你赏金,如果 stackoverflow 允许的话,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多