bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Come utilizzare i ListType di Liferay

Se avete mai realizzato un form HTML attraverso le taglib di Alloy, vi sarete sicuramente resi conto che la tag <aui:select> possiede 2 attributi alquanto sospetti:

  1. listType;
  2. listTypeFieldName.

Spinti dalla curiosità vi sarete chiesti a cosa servono e come si usano; se non lo avete capito, ora ve lo spiego.

Si tratta semplicemente di un meccanismo con cui è possibile valorizzare in automatico le option di un elemento select; non facciamoci però prendere dall'entusiasmo perchè non si tratta di elenchi dinamici di valori, ma di un elenco predeterminato e pressochè fisso.

Come prima cosa vediamo come definire questo elenco di voci. All'interno del database è presente una tabella listtype che possiede i seguenti campi:

  1. listtypeid, chiave primaria della tabella, utilizzata come value della option;
  2. name, chiave di traduzione da utilizzare come label della option;
  3. type_, nome identificativo della lista.

Giusto per fare un esempio vediamo alcune voci già presenti in tabella:

listtypeid name type_
10007 fax com.liferay.portal.model.Account.phone
10008 local com.liferay.portal.model.Account.phone
10009 other com.liferay.portal.model.Account.phone
10010 toll-free com.liferay.portal.model.Account.phone
10011 tty com.liferay.portal.model.Account.phone

Come possiamo vedere il nome della lista è ripetuto perchè in tabella vengono inserite tutte le voci della lista; inoltre esiste anche una convenzione nella nomenclatura della lista che prevede il nome dell'entità a cui sarà associato il ListType (com.liferay.portal.model.Account), seguito dal nome del campo specifico (phone). Tutti i nomi delle liste e dei campi standard sono inoltre censiti nella classe ListTypeConstants.

A questo punto possiamo inserire in pagina la nostra select:

<aui:select name="..." listType="com.liferay.portal.model.Account.phone" />

oppure

<aui:select name="..." listType="<%=ListTypeConstants.ACCOUNT_PHONE%>" />

Questo fa sì che venga visualizzata la combo e popolata con tutti i valori necessari; ma non basta, perchè il valore selezionato vorremmo salvarlo in una nostra entità custom.

Ecco quindi che nel service.xml dovremo andare ad aggiungere alla nostra entità un campo typeId di tipo int (occhio non un long!); a questo punto, se utilizziamo correttamente la taglib <aui:model-context> all'interno del nostro form HTML, abbiamo finito perchè la taglib <aui:elect> andrà a cercare nel nostro bean il valore del campo typeId con cui prevalorizzerà la combo.

E se il campo non si chiama typeId? Beh, basta specificare anche l'attributo listTypeFieldName e specificare il nome del campo della nostra entità.

Ah... c'è solo un problema...

Non esistono API di portale per manipolare al tabella listtype; quindi ogni modifica va fatta a mano direttamente via SQL. Inoltre la chiave primaria non è autoincrementata, pertanto è onere vostro calcolare ad occhio il nuovo valore da utilizzare.

Enjoy!

Precedente
Commenti
Nessun commento. Vuoi essere il primo.