Per quanto ne so non è possibile cambiare il modello di uibinder durante il runtime (poiché è compilato in javascript in compiletime e non è più accessibile in fase di runtime).
Probabilmente dovrai modificare manualmente i colori nel tuo codice gwt (= nei file java, non nei file .xml).
Dritto in avanti:
- creare il database-struttura per la memorizzazione delle informazioni di colore
- creare il codice server per ottenere i colori dal database
- implementare GWT-servizio (e interfaccia asincrona e classe di implementazione servlet) per fornire informazioni sul colore al cliente
implementare il codice client gwt, che richiede le informazioni sul colore e quindi imposta i colori per il tuo gwt-componente nti. Puoi farlo in questo modo (usa il caso cammello come descritto allo http://www.francoismaillet.com/blog/?p=68):
widget.getElement(). GetStyle(). SetProperty ("background", colorValueFromDatabase);
Ovviamente questa soluzione è piuttosto scomoda quando è necessario modificare molti widget.
Alternativa 1:
implementare una pianura vecchio Java Servlet (senza GWT), che può fornire un file CSS (una servlet di serie, che carica i dati del colore dal database e ritorni che colori come definizioni CSS al browser). Utilizzare un collegamento a tale servlet nella pagina iniziale di gwt-html.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CssServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// you somehow have to get your user's information out of the session
User user = (User) request.getSession().getAttribute("loggedInUser");
PrintWriter writer = response.getWriter();
// use saved color values and generate css
writer.append(".header {");
writer.append(" background: " + getHeaderColorForUser(user) + ";");
writer.append(" padding: 6px 6px;");
writer.append(" }");
writer.append(" .anothercssclass {");
writer.append(" background: " + getAnotherCssClassColorForUser(user) + ";");
writer.append(" padding: 6px 6px;");
writer.append(" }");
// finish request
writer.close();
response.setStatus(HttpServletResponse.SC_OK);
}
private String getAnotherCssClassColorForUser(User user) {
// TODO Auto-generated method stub
return null;
}
private String getHeaderColorForUser(User user) {
// TODO Auto-generated method stub
return null;
}
}
Il problema con questa alternativa è che non è possibile aggiornare immediatamente le informazioni sul colore. L'utente deve ricaricare la pagina per vedere i cambiamenti nei suoi stili di colore.
Alternativa 2:
usare javascript (codice nativo) per modificare dinamicamente le configurazioni css.
// in java code:
changeCssStyle("header", "background", colorFromDatabase);
e
private native void changeCssStyle(String cssClass, String cssName, String cssValue)
/*-{
var children = document.getElementsByTagName('*') || document.all;
var elements = new Array();
// iterate over ALL elements
for (i in children) {
var child = children[i];
var classNames = child.className.split(' ');
for (c in classNames) {
// does this element use our css class?
if (classNames[c] == '.' + cssClass) {
// now modify this element: set the attribute with name "cssName" to the value "cssValue"
child.style.setAttribute(cssName, cssValue);
}
}
}
}-*/
;
Conclusione
Tre soluzioni per il vostro problema, non di loro è davvero una soluzione - ma spero che ti aiuta a implementare il codice. In bocca al lupo!
PS: il mio codice non è testato ...
Mentre questi sono soluzioni utilizzabili, c'è una soluzione basata su GWT scarsamente documentata nella guida di sviluppo CssResource. Vedi la mia risposta. – LINEMAN78