Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-12-2011, 17:14   #1
mux85
Senior Member
 
L'Avatar di mux85
 
Iscritto dal: Feb 2006
Messaggi: 958
[Java-JSF] Aggiungere componenti dinamicamente

Ciao a tutti, ho iniziato da pochi giorni a lavorare con JSF e avrei bisogno di una mano. Ho una pagina con un menù a tendina e un pulsante, vorrei che quando si preme il pulsante vengano aggiunti alla pagina dei componenti (text input, check box, ecc...) in base a cosa c'è selezionato nel menu.
So come associare un action listener al pulsante ma dal suo interno non riesco ad aggiungere contenuti alla pagina in quanto nel context (ottenuto con FacesContext.getCurrentInstance()) il ResponseWriter è null, quindi quando chiamo la encodeEnd di un qualsiasi componente ricevo una NullPointerException (invece una semplice addMessage funziona).
Provando a fare la stessa cosa dentro a un componente creato da me invece che nell'action listener tutto funziona correttamente perchè il context (parametro di input di encodeBegin) contiene un ResponseWriter. Però in questo modo i componenti vengono creati subito e non alla pressione del pulsante.
Come faccio a inizializzare quel ResponseWriter?
O sto sbagliando completamente approccio?
Grazie a tutti
mux85 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2011, 12:13   #2
mux85
Senior Member
 
L'Avatar di mux85
 
Iscritto dal: Feb 2006
Messaggi: 958
UP
mux85 è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2011, 12:19   #3
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
Ciao, ti consiglio un altro approccio.
Quando hai una pagina con dei componenti jsf e vuoi mostrare o nascondere alcuni di questi componenti in base a delle necessità o controlli con logiche particolari ti conviene utilizzare la proprietà rendered.
Questa proprietà impostata a true piuttosto che a false ti consenti di visualizzare o nascondere il componente nella pagina.

Ti faccio un esempio classico.
Supponiamo che vuoi visualizzare una coppia label + inputText in base ad una proprietà del tuo backing bean jsf.

Codice PHP:
<h:panelGrid id="panel" columns="2" border="1" rendered={userBean.visualizzaPannello}>
  <
h:outputLabel for="username" value="#Nome" />
  <
h:inputText id="username" value="#{userBean.name}" />
</
h:panelGrid
Nel tuo backing bean, alla pressione di un pulsante, quando scateni una action postresti decidere di impostare la proprietà a tuo piacimento.

boolean visualizzaPannello = true; //oppure a false

Codice:
public class UserBean{

private boolean visualizzaPannello = true; //oppure a false

//..getter e setter

//action
public String faiQualcosa(){
 if(visualizzaPannello == true) 
    visualizzaPannello = false;
  else visualizzaPannellon = true;
  
return "laStessaPagina";
 }

}
Ciao
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2011, 15:44   #4
mux85
Senior Member
 
L'Avatar di mux85
 
Iscritto dal: Feb 2006
Messaggi: 958
Quindi si tratterebbe solo di mostrare/nascondere elementi?
Se è così non si adatta al mio caso. Non posso semplicemente mettere tutti gli elementi possibili e mostrare quelli necessari. In pratica nel menu a tendina io seleziono un tipo di documento e da un file xml vado a leggere le proprietà di quel particolare tipo di documento per mostrare dei campi da compilare e fare una ricerca in base a quei campi. Caricare in anticipo tutti i tipi possibili mi sembra parecchio sconveniente se non impossibile.
Grazie per il suggerimento ma ne avete altri?
mux85 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2011, 15:58   #5
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
Non devi caricare in anticipo tutti i casi possibili.

Supponiamo tu abbia il caso di due menu a tendina classici come provincia e comuni.

Selezioni la provincia, se vuoi cliccki un pulsante (o in alternativa usi un componente ajax enabled) e quindi carichi il menu dei comuni.

Quando cliccli il pulsante tu esegui un metodo action che fa qualcosa di simile.

public String dammiComuni(){
List<Comune> comuni = ejb.cercaComuniDaProvincia(provincia);
...
}

l'oggetto provincia usata è una stringa che sta dietro il backing bean (ed è usata nel value della prima <h:selectOneMenu>).

Con la lista di comuni ti costruisci invece la seconda tendina (che inizialmente vuota ed invisibile).

Spero di esserti stato utile.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2011, 09:39   #6
mux85
Senior Member
 
L'Avatar di mux85
 
Iscritto dal: Feb 2006
Messaggi: 958
Grazie ma mi manca ancora qualcosa. Provo a spiegare un po' meglio cosa devo fare così magari potete aiutarmi ulteriormente.
A seconda di cosa c'è selezionato nel primo menu a tendina (che indica un tipo di documento, ad esempio: fattura, bolla di trasporto, scheda di un dipendente, ecc...) una volta premuto il tasto devo far comparire dei campi che cambiano in base a cosa c'è selezionato. Non devo riempire un altro menu a tendina. In un caso potrei aver bisogno di due campi di testo e una checkbox (con relative etichette), un'altra volta un campo di testo, una checkbox e una combo. Insomma il numero e il tipo di campi può cambiare radicalmente da un tipo di documento all'altro. Posso lo stesso usare il metodo che mi suggerisci? Se si mi sfugge come, puoi spiegarmi meglio? Grazie
mux85 è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2011, 10:06   #7
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
In linea teorica potresti usare l'approccio sopra e mettere dei panelgrid per ogni tipo di documento.
Da quello che mi dici, ad esempio, si potrebbe usare un approccio ancora diverso, utilizzando una jsp diversa per ogni tipo di documento. In una pagina iniziale si potrebbe decidere il tipo di documento e scegliendo un documento piuttosto che un altro l'utente venga direzionato su una pagina/jsp/xhtml diversa.

Bye
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2011, 10:31   #8
mux85
Senior Member
 
L'Avatar di mux85
 
Iscritto dal: Feb 2006
Messaggi: 958
La nuova pagina da usare però andrebbe costruita a priori per ogni tipo di documento no? Io invece vorrei leggere i campi da creare da un file xml al momento del caricamento della pagina
mux85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
I produttori non faranno sconti sulle me...
Ubisoft potrebbe cedere pezzi se il pian...
Qualcomm potrebbe utilizzare una tecnolo...
Starfield per Nintendo Switch 2 potrebbe...
Un MacBook Pro a -300€, i MacBook Air M4...
Amazon abbassa i prezzi sugli iPhone: sc...
Amazon, ancora sconti sugli smartphone A...
iPhone Air 2 'riciclerà' alcuni c...
Offerta Amazon da non perdere: lo speake...
Nioh 3 debutta alla grande su Steam: pri...
Al centro della Via Lattea ci potrebbe e...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
Blue Origin potrebbe realizzare il lande...
Artemis II: il prossimo Wet Dress Rehear...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v