Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-12-2011, 16: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, 11: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, 11: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, 14: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, 14: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, 08: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, 09: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, 09: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


HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
BMW taglierà 8.000 posti di lavor...
7.600 annunci di nudify app su Meta, tut...
Visa ne lascia a casa 2600: intelligenza...
Batterie sostituibili? Per Logitech, gli...
IBM: l'IA riduce i costi delle violazion...
Logitech G Cloud bocciata dal pubblico, ...
NVIDIA RTX Spark, provato un prototipo c...
Sony e Fujifilm: evacuate le fabbriche d...
Starship: Ship 40 continua a galleggiare...
UMC investe su Singapore e Tainan per ri...
Steam Machine, novità sulle code:...
Anche Foxconn abbandona VMware e sceglie...
Windows 11 migliora l'accessibilit&agrav...
WhatsApp introduce il nuovo widget per i...
Blink Mini da 12,99€ e Pan-Tilt a 19,99€...
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: 17:21.


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