Ho un inputField, o qualche altro tag, che voglio essere disabilitato unitl utente fa clic su di esso.
Qualcosa del genere , ma non riesco a farlo funzionare in JSF.
$("div").click(function (evt) { $(this).hide().prev("input[disabled]").prop("disabled", false).focus(); });
Aggiungo disabled = true “al mio campo di input e div valore impostato su (tutti i tag principali in questo caso solo uno), qualcosa come j_idt13 e div del campo di input, quindi il valore” div “sembra j_idt13: inputID
Qualcuno può aiutarmi con jQuery solutin?
Mi piacerebbe sapere come si può fare in JSF, e come.
Devi passare dal lato server, non dal lato client. JSF come un framework MVC basato su componenti stateful protegge in questo modo da richieste manomesse / violate in cui l’utente utilizza linguaggi / strumenti client come HTML o JS per manipolare l’albero DOM HTML e / oi parametri di richiesta HTTP in modo tale che il risultato di JSF disabled
attributo disabled
, readonly
o perfino rendered
è alterato.
Immagina cosa succederebbe se lo sviluppatore JSF verificasse il ruolo di un utente in tale attributo booleano rispetto al ruolo di amministratore come disabled="#{not user.hasRole('ADMIN')}"
e un hacker lo manipolava in modo tale che non fosse non più attivo per gli utenti non amministratori. Questo è esattamente il motivo per cui puoi modificare solo gli attributi menzionati (e l’attributo required
e tutti i convertitori, i validatori, gli ascoltatori di eventi, ecc.) Dal lato server.
È ansible utilizzare
in qualsiasi componente ClientBehaviorHolder
per raggiungere il requisito. Puoi consentire a JSF di generare un
HTML tramite
, che è anche un ClientBehaviorHolder
:
Click this div to toggle the input.
Con questo @ViewScoped
gestito @ViewScoped
( @RequestScoped
non funzionerebbe per le ragioni citate in # 5 di commandButton / commandLink / ajax, metodo action / listener non richiamato o valore di input non aggiornato ):
@Named @ViewScoped public class Bean implements Serializable { private boolean enabled; public void toggle() { enabled = !enabled; } public boolean isEnabled() { return enabled; } }
Indipendentemente dal problema concreto, consulta le seguenti risposte nel caso in cui tu sia realmente interessato a come ottenere la rappresentazione HTML dei componenti JSF tramite JS / jQuery: