मेरे पास एच है: पंक्तियों की एक सूची दिखाते हुए डेटाटेबल, और प्रत्येक पंक्ति के फ़ील्ड इनपुट फ़ील्ड हैं।जेएसएफ डेटाटेबल: पंक्तियों को जोड़ना और निकालना स्पष्ट पंक्ति मान
मैं मेज से पहले एक "पंक्ति जोड़ें" बटन प्रस्तुत करना है, और तालिका की प्रत्येक पंक्ति पर एक "पंक्ति निकालें" बटन।
पाक सेम viewScoped है, और बटन जोड़ने/समर्थन सेम में जावा सूची से तत्वों को दूर, और फिर एक ही दृश्य पर लौटने।
मैं आदेश इनपुट फ़ील्ड मान्य नहीं करने के लिए जब मैं जोड़ने या निकालने के एक पंक्ति में तत्काल विशेषता को "सही" बटन में निर्धारित किया है।
सब कुछ काम करता है ठीक है, लेकिन एक बात: इनपुट फ़ील्ड के मूल्यों को मंजूरी दे दी जाती है। मैंने सोचा था कि विचारों ने बीन को मूल्यों को ध्यान में रखा है देखा गया है।
मैं जोड़ने/सत्यापन ट्रिगर और मूल्यों कि पहले से ही के रूप में उपयोगकर्ता द्वारा टाइप किए गए थे रखने के बिना पंक्तियों को हटाने के लिए कैसे प्राप्त कर सकते हैं?
मेरा विचार:
<h:form>
<h:commandButton value="Añadir Fila" immediate="true" action="#{tablaController.addRowAction}" />
<h:dataTable value="#{tablaController.lista}" var="fila" cellpadding="0" cellspacing="0" border="1">
<f:facet name="header">TABLA</f:facet>
<h:column>
<f:facet name="header"><h:outputLabel value="NOMBRE" /></f:facet>
<h:inputText id="nom" value="#{fila.nombre}" />
<h:message for="nom" class="msjError" />
</h:column>
<h:column>
<f:facet name="header"></f:facet>
<h:commandButton value="Quitar Fila" immediate="true" action="#{tablaController.removeRowAction(fila)}" />
</h:column>
</h:dataTable>
</h:form>
मेरे समर्थन सेम:
@ManagedBean(name="tablaController")
@ViewScoped
public class TablaController {
private List<Fila> lista;
...
public TablaController() { }
...
@PostConstruct
public void init() {
this.lista = new ArrayList<Fila>();
for (int i=0; i<5; i++) {
Fila fila = new Fila();
fila.setNombre("");
this.lista.add(i,fila);
}
}
...
public String addRowAction() {
Fila fila = new Fila();
fila.setNombre("");
this.lista.add(fila);
return "";
}
public String removeRowAction (Fila f) {
boolean exito = this.lista.remove(f);
return "";
}
...
}
अद्यतन -> मेरी समाधान:
मैं यहाँ मेरी समाधान बारे में अगर किसी को दिलचस्पी है।
समस्या यह है कि मैं सत्यापन को छोड़ने के लिए तत्काल = "सत्य" का उपयोग करता हूं, लेकिन यह update_model_values को भी छोड़ देता है, ताकि फॉर्म में उपयोगकर्ता द्वारा दर्ज किए गए मान जोड़े/निकालें बटन पर क्लिक करने के बाद खो जाए पृष्ठ को प्रस्तुत करना
जैसा कि मैं "जेएसआर -303 बीन सत्यापन" का उपयोग करता हूं, मेरा समाधान f: validateBean का उपयोग करके सत्यापन को छोड़ना था/उन्हें अक्षम करने के लिए। बटन पर निर्भर करता है, यदि मैं सत्यापन निष्पादित करना चाहता हूं, तो मैं बीन सत्यापन सक्षम करता हूं (उदाहरण के लिए "सबमिट" बटन में), और यदि मैं उन्हें छोड़ना चाहता हूं, तो मैं बीन सत्यापन अक्षम करता हूं (जैसे जोड़ने/निकालने में पंक्ति बटन)। लेकिन वैसे भी update_model_values हमेशा निष्पादित होते हैं, इसलिए मान गुम नहीं होते हैं।
<h:form>
<f:validateBean disabled="#{!empty param['disableValidation']}">
<h:commandButton value="Añadir Fila" action="#{tablaController.addRowAction}">
<f:param name="disableValidation" value="true" />
</h:commandButton>
<h:dataTable value="#{tablaController.lista}" var="fila" cellpadding="0" cellspacing="0" border="1">
<f:facet name="header">TABLA</f:facet>
<h:column>
<f:facet name="header"><h:outputLabel value="NOMBRE" /></f:facet>
<h:inputText id="nom" value="#{fila.nombre}" />
<h:message for="nom" class="msjError" />
</h:column>
<h:column>
<f:facet name="header"></f:facet>
<h:commandButton value="Quitar Fila" action="#{tablaController.removeRowAction(fila)}">
<f:param name="disableValidation" value="true" />
</h:commandButton>
</h:column>
</h:dataTable>
<h:commandButton value="Submit" action="#{tablaController.saveData}" />
</f:validateBean>
</h:form>
समर्थन सेम:
@ManagedBean(name="tablaController")
@ViewScoped
public class TablaController {
private List<Fila> lista;
...
public TablaController() { }
...
@PostConstruct
public void init() {
this.lista = new ArrayList<Fila>();
for (int i=0; i<5; i++) {
Fila fila = new Fila();
fila.setNombre("fila "+i);
this.lista.add(i,fila);
}
}
...
public String addRowAction() {
Fila fila = new Fila();
fila.setNombre("");
this.lista.add(fila);
return "";
}
public String removeRowAction (Fila f) {
this.lista.remove(f);
return "";
}
...
public String saveData() {
...
//processes the valid data
//for example, calls to a service method to store them in a database
...
return "";
}
...
}
हाय मुझे एक ही समस्या है, अच्छा समाधान है। लेकिन क्या आपको पता है कि अंतर्निहित मान्यताओं को कैसे अक्षम किया जाए, जैसे "आवश्यक = सत्य"? – wutzebaer
आप आवश्यक = "# {खाली param ['अक्षम सत्यापन']} डाल सकते हैं"। इस प्रकार फ़ील्ड की आवश्यकता होगी या आपके द्वारा क्लिक किए गए बटन के आधार पर नहीं। यदि आप आवश्यक एट्रिब्यूट को अक्षम करना चाहते हैं तो आप "अक्षम सत्यापन" पैरा पास करते हैं। – choquero70
@ choquero70 आपको अपना उत्तर अलग से पोस्ट करना चाहिए। इसे सिर्फ प्रश्न में न जोड़ें। इस तरह, एसओ उपयोगकर्ताओं के लिए इसे पार्स करना और समझना आसान होगा। –