【问题标题】:Get value of a randomly generated jsf Table获取随机生成的 jsf 表的值
【发布时间】:2013-07-30 00:26:25
【问题描述】:

我是新手,我正在使用 primefaces 并生成一个动态表,该数据表从托管 bean 创建的列表中获取其值。

我需要将另一个托管 bean 的属性设置为数据表生成的列的值。

例如:Col1,有一个特定的值,我想单击该值,然后会出现一个对话框,显示该 col1 值

<p:dataTable id="dataTable" var="c" value="#{databaseSearch.customerList}"  
                                     paginator="true" rows="10" paginatorAlwaysVisible="false"
                                     paginatorTemplate="Page {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}  Rows per page {RowsPerPageDropdown}"  
                                     rowsPerPageTemplate="5,10,15,30">     
<p:column>  
    <f:facet name="header">  
      <h:outputText value="Machine" />  
    </f:facet>  
    <p:commandButton id="xxx" value="#{c.machine}" action="#{updateEntry.setMachine(c.machine)}" ajax="true" onclick="dlg1.show();" styleClass="ui-Machinebutton"/>
                                    <!-- styleClass="ui-Machinebutton" -->
                            </p:column>

托管 bean 'updateEntry' 具有 getter 和 setter 方法。 豆子

@ManagedBean
@SessionScoped
public class UpdateEntry implements Serializable {

   public Long Machine;

    public Long getMachine() {
        return Machine;
    }

    public void setMachine(Long Machine) {
        this.Machine = Machine;
    }


}

对话框

<p:dialog id="modalDialog" header="Modal Dialog" widgetVar="dlg1" modal="true" height="100" dynamic="True">  
<h:outputText value="#{updateEntry.machine}" />  
</p:dialog>

我明白,为了将参数传递给对话框,我需要托管 bean 的帮助。但是,数据表是随机生成的,我无法传递该特定的随机值。那么如何传递命令按钮的随机值并在单击时设置托管 bean 呢?

目标

单击命令按钮时,我希望将其值传递给托管 bean,因为这是随机生成的数据表,我不确定如何实现。

更新

它有效!相同的代码更新 updateEntry.machine 但问题是因为在 updateEntry.machine 更新为新值之前单击按钮首先打开对话框,对话框显示先前单击的选项。 'Action' 是否发生在 'Onclick' 之前?或者是周围的其他方式 ?我需要先更新 bean,然后打开对话框让它显示更新的值。对话框动态属性的真假都试过了,不知道是干什么用的。

我还需要刷新页面才能在对话框中加载新值,否则无论我单击哪个命令按钮,它都会显示我第一次单击的命令按钮的值,发布页面刷新,它会显示值上次单击的命令按钮。

【问题讨论】:

    标签: jsf primefaces dialog javabeans managed-bean


    【解决方案1】:

    你可以在当前类中为updateEntry 声明一个新对象c
    然后在您的操作按钮中,调用 c 中的一个方法来更改 updateEntry 机器值,例如:

    <p:commandButton id="xxx" value="#{c.machine}" action="#{c.change()}" ajax="true" onclick="dlg1.show();" styleClass="ui-Machinebutton"/>
    

    在 c 类中

    private void change(){
            //set updateEntry.machine value here
        }
    

    所以你的对话框应该看起来像

    <p:dialog id="modalDialog" header="Modal Dialog" widgetVar="dlg1" modal="true" height="100" dynamic="False">  
    <h:outputText value="#{c.updateEntry.machine}" />  
    </p:dialog>
    

    【讨论】:

    • 感谢您的回复,但 C 是为填充数据表而创建的变量,我已更新代码供您参考。这里的重点是'CommandButton'有一个随机生成的值,当我点击它时,我怎样才能得到那个随机生成的值?
    【解决方案2】:

    我发现了问题……

    我将代码更改为下面的代码,它工作了!

    <p:commandButton id="basic" value="#{c.machine}" action="#{updateEntry.setMachine(c.machine)}" ajax="true" oncomplete="dlg1.show();" styleClass="ui-Machinebutton"/>
    

    这里的诀窍是首先设置“机器”变量,并在完成后加载读取相同“机器”变量的对话框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多