Ho preparato solo un semplice esempio di carrello per lo scopo solo dimostrativo.Salta l'elaborazione dei componenti di input all'interno di p: dataTable quando si preme un pulsante che ha solo bisogno di ottenere righe selezionate
La pagina XHTML:
<p:dataTable id="cartDataTable" value="#{testManagedBean.qtyList}"
var="cart"
selection="#{testManagedBean.selectedQtyList}"
rowKey="#{cart.id}">
<p:column selectionMode="multiple" />
<p:column>
<h:outputText value="#{cart.id}"/>
</p:column>
<p:column>
<p:inputText value="#{cart.qty}"/>
</p:column>
</p:dataTable>
<p:commandButton value="Delete" process="@this cartDataTable"
actionListener="#{testManagedBean.delete}"/>
Il bean gestito:
@ManagedBean
@SessionScoped
public final class TestManagedBean implements Serializable
{
private List<Cart>qtyList; //Getter only.
private List<Cart>selectedQtyList; //Getter and setter.
private static final long serialVersionUID = 1L;
@PostConstruct
public void init()
{
qtyList=new ArrayList<>();
qtyList.add(new Cart(1, 1));
qtyList.add(new Cart(2, 1));
qtyList.add(new Cart(3, 2));
qtyList.add(new Cart(4, 1));
qtyList.add(new Cart(5, 3));
}
public void delete()
{
for(Cart cart:selectedQtyList) {
System.out.println(cart.getId()+" : "+cart.getQty());
}
System.out.println("Perform deletion somehow.");
}
}
Si tratta di una sessione di ambito JSF bean gestito in possesso di un carrello della spesa. La classe Cart
è piuttosto intuitiva con solo due proprietà di tipo Integer
, ovvero id
e qty
e un costruttore con parametri.
Quando si fa clic sul pulsante di eliminazione specificato, è necessario impostare le righe selezionate da eliminare sul backing bean.
Per impostare le righe selezionate, l'attributo process
di <p:commandButton>
è impostato @this
e cartDataTable
che definisce le righe selezionate la struttura del bean selectedQtyList
, premendo questo pulsante.
Da questa sessione scope fagiolo, se un inconsapevole utente modifica la quantità nel carrello in ogni riga/s prima di premere il tasto di cancellazione poi, nuovo valore/s di quantità è sono impostati/elencare qtyList
.
Questo dovrebbe accadere solo quando si aggiorna il carrello ma di certo non deve succedere più durante l'eliminazione di una o più righe.
Nell'applicazione reale, la cancellazione viene eseguita in un bean con ambito separato.
Se l'attributo process
di <p:commandButton>
è impostato solo @this
(cioè process="@this"
rimozione cartDataTable
da questo attributo) allora, righe selezionate non sono impostati alla proprietà bean gestito selectedQtyList
.
Come procedere con questo?
Se ho capito bene, puoi dare al tuo inputText uno styleClass di tua scelta, e quindi omettere i componenti con questa classe in process = "" con un selettore jQuery. Vedi la risposta di BalusC qui: http://stackoverflow.com/questions/12614882/how-to-exclude-child-component-in-ajax-update-of-a-parent-component/ –
'' è all'interno di '' .È abbastanza improbabile che i suoi identificativi siano disponibili al di fuori di "" da escludere dall'elaborazione, quando viene fatto clic su "". –
Tiny
È possibile utilizzare l'attributo styleClass e funzionerà. Cosa è improbabile? –