【问题标题】:Primefaces datatable rowEdit not workingPrimefaces数据表行编辑不起作用
【发布时间】:2015-11-11 15:46:16
【问题描述】:

我的问题是,当我单击行旁边的行编辑图标并进行更改,然后单击复选图标时,什么也没有发生。但是,如果我单击取消图标和运行的 rowEditCancel 事件,我会在 p:growl 组件中收到消息。

这是我的视图代码:

<p:dataTable value="#{mainBean.liste}" styleClass="tabelle"
                    var="daten" editable="true" rows="6"
                    emptyMessage="Keine Daten bisher Erfasst"
                    widgetVar="erfasstTabelle" paginator="true" resizableColumns="true"
                    paginatorPosition="bottom" id="tabelleUebersicht"
                    paginatorTemplate=" {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}  Direkt zu Seite: {JumpToPageDropdown}"
                    currentPageReportTemplate="Seite: {currentPage} von {totalPages}"
                    filteredValue="#{mainBean.gefiltert}">

    <p:ajax event="rowEdit" listener="#{mainBean.onRowEdit}" update=":myForm:msgs :myForm:tabelleUebersicht" />
    <p:ajax event="rowEditCancel" listener="#{mainBean.onRowCancel}" update=":myForm:msgs :myForm:tabelleUebersicht" />

    <f:facet name="header">
        <p:outputPanel>
            <h:outputText value="Alle Felder durchsuchen" />
            <p:inputText id="globalFilter"
                onkeyup="PF('erfasstTabelle').filter()" style="width:150px"
                placeholder="Suchbegriff" />
        </p:outputPanel>
    </f:facet>
    <p:column headerText="AVS ID" filterMatchMode="startsWith" filterBy="#{daten.nummer}">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.nummer}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="nummerIn" value="#{daten.nummer}"
                    style="width:100%" />
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Rechtsform" filterMatchMode="startsWith" filterBy="#{daten.rechtsform}">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.rechtsform}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="rechtsfIn" value="#{daten.rechtsform}" style="width:100%" />
            </f:facet>
        </p:cellEditor>                 
    </p:column>
     <p:column headerText="Rechtsf.Speziell">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{daten.rechtSpeziell}" /></f:facet>
            <f:facet name="input">
            <p:selectOneMenu value="#{daten.rechtSpeziell}" style="width:100%">
                 <f:selectItems value="#{mainBean.rechteGenau}" var="r" itemLabel="#{r}" itemValue="#{r}"/>
            </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Erfasser" filterMatchMode="startsWith" filterBy="#{daten.erfasser}">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{daten.erfasser}" /></f:facet>
            <f:facet name="input">
            <p:selectOneMenu value="#{daten.erfasser}" style="width:100%">
                 <f:selectItems value="#{mainBean.erfassers}" var="e" itemLabel="#{e}" itemValue="#{e}"/>
            </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Datum">
    <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.datum}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="datumIn" value="#{daten.datum}" style="width:100%" />
            </f:facet>
        </p:cellEditor>     
    </p:column>
    <p:column style="width:32px">
        <p:commandLink value="löschen" styleClass="ui-icon ui-icon-trash" />
    </p:column>
    <p:column style="width:32px">
        <p:rowEditor />
    </p:column>
</p:dataTable>

这是我的豆子

@ManagedBean
@ViewScoped
public class MainBean implements Serializable{
    private static final long serialVersionUID = 1L;
    private ErfasstDAO erfasstDAO;  
    private List<Erfasst> liste;
    private List<Erfasst> gefiltert;
    private List<String> erfasser;
    private boolean neu;
    private List<String> rechtSpeziell;
    private List<String> rechteGenau;
    //Neuanlage
    private Long nummer = null;
    private FindeId findeId;
    private String recht;
    private List<String> rechtsformen;
    private String rechtDetail = "";
    private Date datum;
    private String notiz = "";
    private List<String> erfassers;

    @PostConstruct
    private void init(){
        findeId = new FindeId();
        erfasstDAO = new ErfasstDAO();

        erfasser = new ArrayList<>();
        erfasser.add("Benjamin");
        erfasser.add("Uwe");
        erfasser.add("Rolf");

        liste = erfasstDAO.alleEintraege();


        rechteGenau = new ArrayList<String>();
        rechteGenau.add(" ");
        rechteGenau.add("Vollständig");
        rechteGenau.add("Unterlagen gezogen");
        rechteGenau.add("Identifizierung/-wB-Ermittlung durch CP");

        rechtsformen = new ArrayList<>();
        rechtsformen.add("natürliche Person");
        rechtsformen.add("juristische Person");


        erfassers = new ArrayList<>();
        erfassers.add("Benjamin");
        erfassers.add("Uwe");
        erfassers.add("Rolf");
    }

    public void setRechteGenau(List<String> rechteGenau) {
        this.rechteGenau = rechteGenau;
    }

    public void setErfassers(List<String> erfassers) {
        this.erfassers = erfassers;
    }

    public void inputListener(AjaxBehaviorEvent event) {
        if (event != null) {

            UIInput input = (UIInput) event.getComponent();
            Long id = (Long) input.getValue();

            if (id != 0) {
                if (findeId.finden(id) != null) {

                    FacesMessage m = new FacesMessage(
                            FacesMessage.SEVERITY_ERROR, "Vorhanden",
                            findeId.finden(id) + " bereits vorhanden");
                    FacesContext.getCurrentInstance().addMessage(null, m);
                } else {

                    FacesMessage m = new FacesMessage(
                            FacesMessage.SEVERITY_INFO, "Noch frei", id
                                    + " noch nicht vergeben!");
                    FacesContext.getCurrentInstance().addMessage(null, m);
                }
            }

        }

    }

    public void speichern() {
        Erfasst er = new Erfasst();
        er.setNummer(nummer);
        er.setErfasser("Benjamin");
        er.setRechtsform(recht);
        er.setDatum(datum); 
        er.setRechtSpeziell(rechtDetail);   
        er.setNotiz(notiz);

        if(erfasstDAO.neu(er))
        {
            FacesMessage m = new FacesMessage(
                    FacesMessage.SEVERITY_INFO, "Angelegt", String.valueOf(nummer));
            FacesContext.getCurrentInstance().addMessage(null, m);  
        }

        liste = erfasstDAO.alleEintraege();
    }




    public void onRowEdit(RowEditEvent event) {

          if(erfasstDAO.abgeaendert((Erfasst) event.getObject()))
          {
          FacesMessage msg = new FacesMessage("Geändert", String.valueOf(((Erfasst) event.getObject()).getNummer()));
          FacesContext.getCurrentInstance().addMessage(null, msg);
          }
          else
          {
             FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fehler", "Beim ändern von: " + String.valueOf(((Erfasst) event.getObject()). getNummer()  + " ist ein Fehler aufgetreten"));
             FacesContext.getCurrentInstance().addMessage(null, msg);
          }

          liste = erfasstDAO.alleEintraege();
    }

    public void onRowCancel(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Bearbeitung abgebrochen", String.valueOf(((Erfasst) event.getObject()).getNummer()));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }


    public boolean isNeu() {
        return neu;
    }


    public void setNeu(boolean neu) {
        this.neu = neu;
    }

    public List<String> getRechtSpeziell() {
        return rechtSpeziell;
    }

    public void setRechtSpeziell(List<String> rechtSpeziell) {
        this.rechtSpeziell = rechtSpeziell;
    }

    public Long getNummer() {
        return nummer;
    }

    public void setNummer(Long nummer) {
        this.nummer = nummer;
    }

    public String getRecht() {
        return recht;
    }

    public void setRecht(String recht) {
        this.recht = recht;
    }

    public List<String> getRechtsformen() {
        return rechtsformen;
    }

    public void setRechtsformen(List<String> rechtsformen) {
        this.rechtsformen = rechtsformen;
    }

    public String getRechtDetail() {
        return rechtDetail;
    }

    public void setRechtDetail(String rechtDetail) {
        this.rechtDetail = rechtDetail;
    }

    public Date getDatum() {
        return datum;
    }

    public void setDatum(Date datum) {
        this.datum = datum;
    }

    public String getNotiz() {
        return notiz;
    }

    public void setNotiz(String notiz) {
        this.notiz = notiz;
    }

    public List<String> getRechteGenau() {
        return rechteGenau;
    }

    public List<String> getErfassers() {
        return erfassers;
    }


    public List<Erfasst> getListe() {
        return liste;
    }

    public List<Erfasst> getGefiltert() {
        return gefiltert;
    }

    public void setGefiltert(List<Erfasst> gefiltert) {
        this.gefiltert = gefiltert;
    }
}

【问题讨论】:

  • 你正在调用#{mainBean.onRowEdit1},并且java bean方法被称为onRowEdit
  • 对不起我的错误...但没有解决问题
  • 看看你的问题是不是因为你只更新消息,尝试将&lt;p:ajax event="rowEdit" listener="#{mainBean.onRowEdit}" update=":myForm:msgs" /&gt;更改为&lt;p:ajax event="rowEdit" listener="#{mainBean.onRowEdit}" update=":myForm" /&gt;,如果可行我会添加作为答案!
  • 或者只是在更新参数update=":myForm:msgs :myForm:tabelleUebersicht"上添加你的数据表ID

标签: primefaces


【解决方案1】:

我注意到您没有在 rowEdit 上更新 dataTable,只在 rowCancel 上更新。 您是否调试过您的 rowEdit 方法?您的 jsf 页面中的操作是否调用了支持 bean 中的方法? 您是否尝试过更改 bean 的范围?

【讨论】:

  • 现在我已经调试了我的代码。仅调用 Bean 中的 onRowCancel 方法。 onRowEdit 没有。
  • @user3515460 我现在无法验证您的代码,因为我在工作,但这个问题可能会对您有所帮助:stackoverflow.com/questions/28059817/…
  • 在我的@PostConstruct 中,我用这一行填满了我的表 liste = erfasstDAO.alleEintraege();
  • 我想我应该更多地解释这个问题。因此,当我单击编辑图标时,我可以在每个单元格中输入文本或其他内容。但是当我想保存我的编辑并单击检查图标时,每个单元格的编辑器都不会关闭。所以每个单元格仍然有编辑输入字段。对于测试,我还将 rowEdit 的侦听器设置为与 rowEditCancel 相同的方法,它可以正常工作,但它不起作用。所以只有取消图标可以正常工作。
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
相关资源
最近更新 更多