Samstag, 18. Dezember 2010

Tastaturmaus für Linux und Windows

Es kommt hin und wieder vor, daß man nur eine Tastatur zur Verfügung hat, aber eine Maus benötigen würde.

Für Linux stellt man die Tastaturmaus so ein:
STRG+Shift+Num
Mit dem numerischen Ziffernblock kann man nun die Maus steuern, mit "5" löst man einen Linksklick aus, mit "+" einen Doppelklick, mit "-" stellt man die 5 auf Rechtsklick um, mit "*" wieder auf Linksklick zurück. Mit "0" klickt man dauerhaft, wie man es für Drag and Drop braucht.

Für Windows funkt es so:
Alt+Shift-Num (linkes Shift verwenden)
"5" ist der Linksklick, "+" der Rechtsklick, für das halten wird ebenfalls die "0" verwendet.
Ausschalten läßt sich das Ganze wieder mit Alt + Num.

Links:
Windows Anleitung
Linux Anleitung

JSF datatable und commandlink

JavaServer Faces 2.0.3
Tomahawk 1.1.10

Will man in seiner h:datatable einen h:commandlink verwenden und das dahinterliegende Bean im Requestscope arbeitet, passiert es häufig, das die action des h:commandlink einfach nicht ausgeführt wird. Viele Seiten im Netz beschäftigen sich mit diesem Phänomen, aber eine hieb und stichfeste Lösung findet man eigentlich nicht. Zum Laufen gebracht habe ich es dann mit der Tomahawk Version der datatable f:datatable.
Aber auch dabei gibt es einige Fallstricke, die einem im ersten Augenblick nicht ganz einleuchten.

Hier der xhtml Teil, wie er funktioniert, die Action also ausgeführt wird:


    
     
      
      
     
     
      
      
      
      
     
    
   

Zu beachten ist hier, das es nur funktioniert wenn preserveDatamodel true gesetzt wird, andernfalls wird die action des h:commandlinks nicht ausgeführt. Eine genauere Erklärung was preserveDataModel genau macht, findet man hier.

Eine weitere Falle stellt das attribute rendered dar, setzt man es als Attribut der t:datatable ein, funktioniert der h:commandlink schon wieder nicht.

f:param wird gesetzt, damit man in der Actionmethode auch den richtigen Eintrag erwischt:

FacesContext.getCurrentInstance().getExternalContext()
   .getRequestParameterMap().get("imageDetailInfo")

Links:
Artikel und Diskussion über dieses Problem
Blogbeitrag: Lösung des Problems durch Schreiben eines CommandLinkRenderers
Auführlicher Artikel von BalusC über das Arbeiten mit datatables

Mittwoch, 8. Dezember 2010

Autologin Fedora

OS: Fedora 14

Wenn man zB seine Platte verschlüsselt hat und sowieso der einzige Benutzer des Systems ist, stört die zweifache Passworteingabe doch etwas. Um dieser zu entgehen, fügt man einfach im File /etc/gdm/custom.conf unter der Sektion [daemon] folgende Zeilen ein:

AutomaticLoginEnable=true
AutomaticLogin=username

Links:
Blogbeitrag von rvokal

Freitag, 3. Dezember 2010

JSF 2.0 - Ajax Einsatz

Java Server Faces 2.0.3

Der Einsatz von Ajax in JSF ist relativ simpel zu implementieren, hier ein kleines Testbeispiel, das 2 Buttons includiert, wobei einer einen Ajax Request auslöst, während der andere einen normalen Request auslöst.


   
    
     
    
    
   
   
    
   
   
    
   
  

Der f:ajax tag wird einfach als Kindelement unter das Control gehängt, daß den Request auslösen soll, und als Attribut render wird die id des Tags eingetragen, der als einziger neu gerendert werden soll, simpler geht es fast nicht mehr.
Dazu die Bean, die natürlich auch in der faces-config.xml registriert ist:

import java.util.Date;

public class SearchBean {
 private Date now;
 public Date getNow() {
  now =  new java.util.Date();
  return now;
 }
 public void setNow(Date now) {
  this.now = now;
 }
}

Man kann schon sehen wie beim Drücken des einen Buttons alles neu gezeichnet wird, während der andere nur das eine Control neu zeichnet.

Einen Fallstrick gibt es, der mit etwas Zeit gekostet hat: Der Ajax Request funktionierte einfach nicht, und im Log war diese seltsame Fehlermeldung zu finden:
Eine oder mehrere Ressourcen haben das Ziel 'head', aber es wurde keine Komponente 'head' in der Ansicht definiert.


Mit Hilfe dieses Blogeintrags habe ich dann das Problem ausmachen können:
Das jsf.js wurde nicht geladen, weil ich den Tag 'head' eingesetzt habe und nicht den Tag 'h:head'.


Links:
Ajax Kapitel aus dem JSF 2.0 Buch der Firma irian