передача значения из таблицы данных в диалог

У меня проблема с передачей данных из таблицы данных, которая заполняется из базы данных в диалоговое окно для редактирования значений.

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>

and function from PredmetBean.java @ViewScoped implements 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());
        }
    }
}

при нажатии на кнопку редактирования диалоговое окно должно открываться со значениями из строки, в которой кнопка нажата. Но единственное, что я получаю, это диалоговое окно, пытающееся открыться и сломаться, а затем появляются повсюду требуемые сообщения. Когда в диалоговом окне для значения отображается диалоговое окно list.somename, оно заполняет поля последним значением объекта в списке. Если у кого-то есть идея, как решить этот или какой-либо другой метод редактирования пользовательских значений, не переходя на другую страницу, это было бы здорово.


person DarkTemplar    schedule 31.08.2015    source источник
comment
Взгляните на витрину PrimeFaces   -  person Kukeltje    schedule 01.09.2015
comment
попробуйте удалить тег ‹p:dialog› вне вашего h:dataTable.   -  person Fritz    schedule 01.09.2015
comment
@Fritz, спасибо, теперь у меня наполовину меньше всплывающих окон с обязательными сообщениями ... но я все еще получаю их.   -  person DarkTemplar    schedule 01.09.2015
comment
Не могли бы вы отредактировать свой пост и добавить более подробную информацию о том, что вы сделали, чтобы сократить количество сообщений вдвое? так что оттуда мы продолжим проверять, что не так. Спасибо   -  person Fritz    schedule 02.09.2015
comment
@Fritz, извините за повтор латте, но в конце мне удалось его решить. Спасибо за ваш интерес и помощь, которые поставили меня на правильный путь.   -  person DarkTemplar    schedule 02.09.2015
comment
Замечательно. иди ТАКОЕ сообщество! :D   -  person Fritz    schedule 03.09.2015


Ответы (1)


Держите p:dialog вне формы и используйте атрибут привязки в вашем dataTable, показанном в приведенном ниже примере.

Объявите строку ниже своим управляемым компонентом

private HtmlDataTable dataTable;

Добавьте приведенную ниже строку в таблицу данных.

binding="#{managedBean.htmlDataTable}"

Тогда ваш метод редактирования будет таким

public void edit(){

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

Надеюсь, это поможет вам

person Mohankumar Rathinam    schedule 01.09.2015
comment
Зачем для этого нужна привязка? На витрине PrimeFaces есть несколько примеров, которые полностью функционируют без привязки... - person Kukeltje; 01.09.2015
comment
если мы собираемся полностью с основным компонентом лица, это нормально, я дал ссылку на то, как его использовать в компоненте h: dataTable - person Mohankumar Rathinam; 02.09.2015
comment
Вы делаете большую часть передачи с помощью h: datatable без привязки к .. Просто не уверен насчет части ajax - person Kukeltje; 02.09.2015