【问题标题】:p:commandButton doesn't work on second page using lazyload in dataTablep:commandButton 在数据表中使用延迟加载在第二页上不起作用
【发布时间】:2015-09-22 14:29:44
【问题描述】:

我有一个与 LazyDataModel 配合得很好的数据表。它有一个命令按钮,可以为每一行打开一个报告:

在第一页上它工作正常,但是当我换页时(例如,转到第 2 页)commandButton 错过了控件。

报告应在新页面中打开。

命令按钮来源:

<p:column style="width:30px; text-align:center;" headerText="Texto">
<p:commandButton action="#{bean.print}" immediate="true"
    title="View report" ajax="false" onclick="this.form.target='_blank'">           
    <f:ajax event="click" execute="@form"></f:ajax>                         
    <f:setPropertyActionListener value="#{obj}" target="#{bean.myObject}"/>                         
</p:commandButton>

在第二页而不是打开报告,它只是给出了一个新的_blank页面,页面1中的jsf页面。报告没有显示。

有人可以帮助我吗? 提前致谢。

【问题讨论】:

标签: jsf primefaces datatable


【解决方案1】:

将表单组件添加到commandButton

<p:column style="width:30px; text-align:center;" headerText="Texto">
<h:form>
<p:commandButton action="#{bean.print}" immediate="true"
    title="View report" ajax="false" onclick="this.form.target='_blank'">           
    <f:ajax event="click" execute="@form"></f:ajax>                         
    <f:setPropertyActionListener value="#{obj}" target="#{bean.myObject}"/>                         
</p:commandButton>
</h:form>
</p:column>

【讨论】:

  • 为什么?这样做的好处或理由是什么?请参阅我对这个问题的评论。问题中的构造一开始就很奇怪。
  • 因此您可以使用数据表的第一个属性来修复您当前的号码页。因为在第二页上,commandButton 无法记住表单。
  • 我完全不明白你的意思。而且您的代码中有同样奇怪的(anyone 不使用)构造。在列中嵌入表单会更奇怪。我从未见过有人这样使用它
  • 我正在尝试帮助你。对于“表单”,你不能把它放在你想要的地方。检查所有属性数据表,我们会找到一个名为“first”的属性并使用它。
  • 不,你不能把表格放在任何你想要的地方。有限制。例如表单不能嵌套,所以如果数据表需要在一个表单中(因为有很多输入),或者如果需要对需要在表单中的输入进行过滤,那么在列中添加一个表单是行不通的......
【解决方案2】:

<p:dataTable id="dtform" widgetVar="dtform"
value="#{managedBeans.lazyModel}" var="form" paginator="true" emptyMessage="#{message.ListeVide}"
rows="10" rowKey="#{form.id}" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" paginatorPosition="bottom" paginatorAlwaysVisible="true" selectionMode="single"
first="#{managedBeans.first}" lazy="true" > <p:ajax event="page" process="@this" listener="#{managedBeans.onPageChange}" />

    protected int first=0;
    public int getFirst() {  
       return first;  
  }  
  public void setFirst(int first) {  
       this.first = first;  
  }  
  public void onPageChange(PageEvent event) {  
       this.setFirst(((DataTable) event.getSource()).getFirst());  


  }  `

【讨论】:

  • 嗨,又是我……只是没有任何“解释”的代码说明为什么它是错误的答案不是一个好的答案。请改进它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2022-01-09
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多