मेरे पास 2 कॉलम वाला एक साधारण आलसी डेटा मॉडल है। दूसरे कॉलम में केवल चेकबॉक्स हैं जो डिफ़ॉल्ट रूप से अक्षम हैं (उन्हें क्लिक नहीं कर सकते)। पंक्ति चयन पर मैं केवल load विधि को लागू किए बिना चेकबॉक्स (checkbox.disabled = false) को सक्षम करना चाहता हूं - क्योंकि मेरा डेटा नहीं बदला गया है इसलिए डेटाबेस का अनुरोध करने की कोई आवश्यकता नहीं है। समस्या यह है कि जब मैं चेकबॉक्स को बदलने के लिए अपने डेटाटेबल को अपडेट करता हूं। false में अक्षम, फिर RENDER_PHASE को लागू किया जाता है और load विधि को कॉल किया जाता है, दूसरी ओर यदि मैं अपनी डेटा तालिका को अपडेट नहीं करता हूं, तो चेकबॉक्स हमेशा अक्षम रहता है। मैं इसे एक साथ कैसे काम कर सकता हूं?

अपडेट करें:

<h:form id="form-id">
            <p:dataTable var="element"
                         id="data-table-id"
                         value="#{view.elements}"
                         lazy="true"
                         paginator="true"
                         paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                         selectionMode="single"
                         rows="5"
                         rowsPerPageTemplate="5,10,15,30"
                         selection="#{view.selectedElement}">

                <p:ajax event="rowSelect"
                        listener="#{view.someMethod()}"
                        update="checkbox"/>

                <p:column headerText="Element"
                          width="300">
                    <h:outputText value="#{element.name}"/>
                </p:column>


                <p:column headerText="Active"
                          width="300">
                    <p:selectBooleanCheckbox id="checkbox"
                            disabled="#{view.selectedElement.id ne element.id}"
                            value="#{element.active}"/>
                </p:column>
            </p:dataTable>
        </h:form>

जब मैं update="form-id" डालता हूं तो सक्रिय चेकबॉक्स सक्षम हो जाता है - लेकिन जैसा कि मैंने कहा, load विधि लागू की जाती है जो अवांछनीय व्यवहार है

1
minizibi 10 फरवरी 2019, 18:28

1 उत्तर

सबसे बढ़िया उत्तर

अगर आप अपडेट = "फॉर्म-आईडी" कहते हैं तो जेएसएफ काम करता है, जेएसएफ आपके डेटाटेबल के पुनर्निर्माण सहित पूरे फॉर्म को फिर से प्रस्तुत करेगा जो इस प्रकार आपकी लोड विधि को कॉल करता है।

ऐसा लगता है कि आप एक पंक्ति को अपडेट करना चाहते हैं OmniFaces Ajax.updateRow विधि देखें।

तो उदाहरण के लिए जेएसएफ ...

<p:dataTable binding="#{myDataTable}"

<p:commandButton value="Update" action="#{ajaxBean.updateRow(myDataTable, 0)}" />

जावा:

public void updateRow(UIData table, int index) {
   Ajax.updateRow(table, index);
}
4
Melloware 10 फरवरी 2019, 19:27