获取随机生成的jsf表的值

时间:2013-07-30 02:04:16

标签: jsf primefaces dialog javabeans managed-bean

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

我需要使用数据表生成的列的值设置另一个托管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,因为这是随机生成的dataTable,我不知道如何实现它。

更新

有效!相同的代码更新updateEntry.machine,但问题是因为在updateEntry.machine更新为新值之前单击该按钮会首先打开对话框,该对话框将显示之前单击的选项。 '行动'是否发生在'Onclick'之前?或者是周围的其他方式 ?我需要先更新bean,然后打开它的对话框以显示更新的值。我试过True&amp;错误的对话框的动态属性,不知道是什么。

另外我需要刷新页面以获取在对话框中加载的新值,否则无论我点击哪个命令按钮它都显示我首先点击的命令按钮的值,发布页面刷新,它显示值最后点击的命令按钮。

2 个答案:

答案 0 :(得分:0)

你可以在当前班级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>

答案 1 :(得分:0)

我发现了问题...

我将代码更改为以下并且有效!

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

这里的诀窍是首先设置'Machine'变量,并在完成加载时读取相同'Machine'变量的对话框