将值从数据表传递到对话框

时间:2015-08-31 19:38:46

标签: primefaces jsf-2.2

我遇到从dataTable传递数据的问题,从数据库填充到对话框以编辑值。

izmenaPredmeta.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Obrada predmeta</title>
    </h:head>
<h:body>
    <center>
        <h:form>
            <p:growl id="msgs" showDetail="true"/>
            <h:dataTable var="list" value="#{pred.getPredmets()}" border="1" cellpadding="3" cellspacing="3" bgcolor="lightgray">
                <h:column>
                    <f:facet name="header">Naziv</f:facet>
                    <h:outputText value="#{list.naziv}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Akronim</f:facet>
                    <h:outputText value="#{list.akronim}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Semestar</f:facet>
                    <h:outputText value="#{list.semestar}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Godina</f:facet>
                    <h:outputText value="#{list.god}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Odsek</f:facet>
                    <h:outputText value="#{list.odsek}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Aktivan</f:facet>
                    <h:outputText value="#{list.drzise}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">Edit</f:facet>
                    <h:commandButton value="Edit" action="#{pred.edit()}" onclick="PF('dlg3').show();"> 
                        <f:param name="idp" value="#{list.idpred}"/>
                    </h:commandButton>
                    <p:dialog header="Edit" widgetVar="dlg3" showEffect="explode" hideEffect="bounce" height="350">
                        <h:panelGrid id="panel" columns="2" cellpadding="5" border="1" bgcolor="gray">
                            <h:outputText value="Naziv"/>
                            <p:inputText style="width: 97%"  value="#{pred.naziv}" required="true" requiredMessage="Naziv je obavezan"/>
                            <h:outputText value="Akronim"/>
                            <p:inputText style="width: 97%" value="#{pred.akronim}" required="true" requiredMessage="Akronim je obavezan"/>
                            <h:outputText value="Semestar"/>
                            <p:inputText style="width: 97%" value="#{pred.semestar}" required="true" requiredMessage="Semestar je obavezan"/>
                            <h:outputText value="Godina"/>
                            <p:inputText style="width: 97%" value="#{pred.god}" required="true" requiredMessage="Godina je obavezna"/>
                            <h:outputText value="Odsek"/>
                            <p:inputText style="width: 97%" value="#{pred.odsek}" required="true" requiredMessage="Odsek je obavezan"/>
                            <h:outputText value="Drzi se"/>
                            <p:inputText style="width: 97%" value="#{pred.drzise}" required="true" requiredMessage="Drzi se je obavezno"/>
                            <p:commandButton value="Save" action="#{pred.upPredmet()}" />
                        </h:panelGrid>
                    </p:dialog>
                </h:column>
                <h:column>
                    <f:facet name="header">Delete</f:facet>
                    <h:commandButton value="Delete" action="#{pred.delPredmet()}">
                        <f:param rendered="msgs" name="id" value="#{list.idpred}"/>
                    </h:commandButton>
                </h:column>
            </h:dataTable>
        </h:form>
    </center>
</h:body>

来自PredmetBean.java的

和函数@ViewScoped实现了Serializable

// getter's, setter's and other functions  
public void edit(){
    ArrayList<Predmet> PrList = Predmet.getPredmets();
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
    int id = Integer.parseInt(request.getParameter("idp"));
    for(Predmet pr : PrList){
        if( pr.getIdpred() == id ){
            this.setIdPred(pr.getIdpred());
            this.setNaziv(pr.getNaziv());
            this.setAkronim(pr.getAkronim());
            this.setSemestar(pr.getSemestar());
            this.setGod(pr.getGod());
            this.setOdsek(pr.getOdsek());
            this.setDrzise(pr.getDrzise());
        }
    }
}

单击编辑按钮对话框时,应打开包含按钮单击的行中的值。但我唯一得到的是对话框尝试打开和中断,然后requiredMessages全部弹出。 当在对话框中时,list.somename对话框显示并使用列表中的最后一个对象值填充fileds。 如果有人知道如何解决这个或其他方法来编辑用户值而不去其他页面那就太棒了。

1 个答案:

答案 0 :(得分:-1)

将p:对话框保留在表单之外,并在示例中的dataTable节目中使用binding属性。

声明托管bean的下一行

private HtmlDataTable dataTable;

在dataTable中添加以下行

binding="#{managedBean.htmlDataTable}"

然后你的编辑方法就像这样

public void edit(){

    Predmet selectedObject = (Predmet) getDataTable().getRowData(); 
}

希望这可以帮到你