dinox's page

26
lug

Sempre l’interno del progetto CRM ho avuto la necessità di utilizzare un editor più complesso del semplice campo form nel quale scrivere una descrizione del ticket. Dopo varie prove ho scelto CKEditor, un prodotto davvero molto potente che, proprio per questo, necessita spesso di essere configurato un minimo. Dopo averlo scaricato ed integrato nel sistema (operazione davvero molto semplice) è possibile modificarlo in base alle proprie necessità agendo sul file “config.js” disponibile nella cartella principale.

In particolare io ho dovuto limitare il numero di funzioni presenti sulle barre degli strumenti (molti non mi servivano ed occupavano spazio inutilmente). Per farlo potete mettere nel file config.js all’interno della già presente funzione “CKEDITOR.editorConfig = function( config ) {“ tutto ciò che segue:

// This is actually the default value.
config.toolbar_Full =
[
    ['Source','-','Save','NewPage','Preview','-','Templates'],
    ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
    ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
    ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
    '/',
    ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
    ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
    ['Link','Unlink','Anchor'],
    ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
    '/',
    ['Styles','Format','Font','FontSize'],
    ['TextColor','BGColor'],
    ['Maximize', 'ShowBlocks','-','About']
];

Lo slash (‘/’) indica un “a capo” fra le barre, il trattino (‘-’) indica una spaziatura fra le barre. I nomi credo non serva commentarli. Eliminate, spostate o aggiungete, dunque, tutto quello che volete in base alle vostre specifiche esigenze.

,

30
apr

Quando si programma in JAVA (ma lo stesso vale anche per altri linguaggi) può capitare di dover invocare in maniera dinamica un determinato metodo di una determinata classe. Tanto per fare un esempio banale, supponiamo di voler costruire una applicazione calcolatrice dove sono presenti due campi per inserire le cifre ed una combo con le 4 operazioni matematiche (somma, sottrazione, divisione, moltiplicazione). Quello che si vuole è che ad ogni elemento della combo sia associata una funzione che faccia, appunto, l’operazione di somma, sottrazione, divisione o moltiplicazione.

Il problema potrebbe essere risolto banalmente – ma oserei dire anche nella maniera più “brutta” – con un costrutto switch-case (if (somma) -> fai la somma else if (differenza) -> fai la differenza, …) oppure utilizzando una invocazione dinamica delle funzioni somma, sottrazione, divisione o moltiplicazione. Per i nostri scopi supponiamo di avere la classe OperazioniMatematiche nella quale sono state create le suddette funzioni come metodi pubblici.

More »

,

30
giu

I se sono relativi alla tipologia di interazione che volete avere con la finestra modale. Chiunque abbia mai avuto a che fare con i popup sa benissimo che essi possono portare qualche problema, tutto sommato risolvibile. Una cosa che risulta impossibile da fare, se non con qualche particolare accorgimento, è metterli in “primo piano” in modo da impedire all’utente di cliccare sulla pagina sottostante senza aver prima chiuso il browser. Lo stesso comportamento, insomma, di una finestra modale di Windows.

Quella delle finestre modali è una possibilità è utilizzabile, usando i browser di ultima generazione quali Firefox 3, Explorer 7 o 8, Safari 4 ma ci sono alcune controindicazioni. A tutti gli effetti con i browser “non Microsoft” tutto funzionerebbe in maniera regolare, come se si avesse a che fare con un normale popup ma messo in primo piano. Con IE, invece, se il popup contiene una form, una volta schiacciato il tasto “Invia” si aprirà una nuova finestra. Oppure se avete nel popup avete una funzione che richiama la pagina che lo ha aperto (parent) ad esempio per fare un refresh questa non funzionerà. Non so se ci sono altri problemi ma per me questi sono stati sufficienti a farmi abbandonare l’idea.

Se invece non avete problemi di gestione simili potreste utilizzare un codice simile al seguente. Nella parte <head> pagina dove dovete chiamare il popup:

function openModalWindows() {
if (window.showModalDialog) {
window.showModalDialog("popup.html","nome","dialogWidth:200px;dialogHeight:300px");
} else {
window.open("popup.html","nome","width=200,height=300,toolbar=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,modal=yes');
}
}

Il link presente nella sezione <body> dal quale volete chiamare la funzione per aprire il popup dovrebbe essere del tipo:

<a href="popup.html" target="nome" onclick="openModalWindows(); return false;">Apri popup modale</a>

, , ,

21
mag

Quando si lavora con i popup si può avere la necessità di chiuderlo e contemporaneamente ricaricare la pagina che lo ha aperto a seguito, ad esempio, del click su un link. In Javascript questa operazione è davvero semplice. Create una funzione come quella che segue all’interno del tag <head> della pagina HTML:

<script language="JavaScript" type="text/javascript">
<!--
function closeAndLoad (page) {
opener.location.href = page;
close();
}
// -->
</script>

More »

, ,

20
mag

Se in JAVA dovete arrotondare un numero con la virgola all’intero più vicino o comunque ad un numero decimale ma con le cifre (la precisione) da noi decisa, potete utilizzare questa funzione:

/**
* Arrotonda eventualmente un double all'intero più vicino<BR>
* Esempi:<BR>
* rounder(3.99, 1e-2) -> 4.0
* rounder(3.99, 1e-3) -> 3.99
* @param value valore da arrotondare
* @param precision precisione; ad esempio, 1e-7 indica che vogliamo 7 cifre decimali max dopo la virgola
* @return il valore eventualmente arrotondato
*/
public static double roundToInteger(double value, double precision) {
if (value>=0)
return 1.0-(value-Math.floor(value)) < precision ? Math.ceil(value) : value;
else
return 1.0-(Math.ceil(value)-value) < precision ? Math.floor(value) : value;
}

, , ,

15
mag

Se avete la necessità di selezionare i dati da una tabella secondo un criterio che prevede che il valore di un campo sia fra quelli contenuti in un insieme potete usare la clausola “in”.  Ad esempio:

select * from tabella where campo in (valori_che_campo_può_assumere)

Supponendo che campo sia un intero, questa è una possibile query:

select * from tabella where campo in (1, 2, 4, 8, 9)

Il belle è che questa cosa può essere utilizzando anche con i valori restituiti da un’altra query di selezione, come nel caso seguente:

select * from tabella where campo in (select campo_1 from tabella_1 where campo_2 = valore)

, ,

13
mag

Per ricavare l’indirizzo IP del client che si collega ad una nostra pagina web realizzata in PHP si possono usare le seguenti righe di codice:

$ip_address = getenv('REMOTE_ADDR');

Oppure

$ip_address = $_SERVER['REMOTE_ADDR'];

13
mag

Torniamo sulla questione delle date in JAVA e vediamo come estrarre il giorno da una data:

public String getGiorno(Date d) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String giorno = sdf.format(d);
return giorno;
}
catch (Exception e) {
e.printStackTrace();
return "";
}
}

,

11
mag

Quando si lavora con Struts può essere necessario inviare a video un messaggio per l’utente che indica il tipo di errore che magari egli ha commesso nell’inserimento di un dato oppure come risposta ad un errore del sistema stesso. In questo caso si può utilizzare ActionErrors. Nella action Java dove elaborate le informazioni dovrete creare queste quattro linee di codice:

ActionErrors errors = new ActionErrors();
ActionError error = new ActionError("error.nomeNonPresente");
errors.add(ActionErrors.GLOBAL_ERROR, error);
saveErrors(request, errors);

dove error.nomeNonPresente è stato definito nell’ApplicationResources.properties.

Nella pagina dove volete visualizzare l’errore dovrete invece inserire quanto segue:

<html:messages id="error">
<c:out value="${error}"/>
</html:messages>

Non dimenticate di includere nella pagina stessa la chiamata alle giuste taglib (nel nostro caso abbiamo usato quelle di Struts):

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>

, , , , ,

08
mag

Google Maps è un’applicazione web davvero molto potente che può essere utilizzata per gli usi più disparati. Se avete bisogno di fare delle cose molto particolari, allora è bene che scarichiate le API utilizzando direttamente il vostro account Google. Non sempre, però, è necessario scendere così nel dettaglio: se avete a disposizione solo i dati relativi ad un certo indirizzo potreste utilizzarli per creare la vostra mappa interattiva.

Questo il codice per creare facilmente un iframe HTML con la mappa:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=it&amp;geocode=&amp;q=Via+Mulino+del+Gioco,+65013+Citt%C3%A0+Sant'Angelo+PE,+Italy&amp;sll=&amp;sspn=&amp;ie=UTF8&amp;ll=&amp;spn=&amp;z=14&amp;iwloc=addr&amp;output=embed"></iframe>

Di seguito il significato dei parametri che permettono di personalizzare la mappa:
More »

,