Die fünf entscheidenden Fragen des Managements

Book review: Die fünf entscheidenden Fragen des Managements, von Peter F. Drucker.

Ich hatte das Buch von Peter F. Drucker schon fast ein Jahr in der Schublade liegen. Irgendwie war ich sehr skeptisch bei diesem Buch, denn ich hatte mich ja schon in das MBO (Management by Objectives / Führen durch Zielvereinbarung) Thema eingelesen und befunden, dass ein Thema das wesentlich älter ist als ist nix mehr für mich ist.

Weit gefehlt. Da könnten sich Manager von heute noch eine Scheibe runter schneiden.

Die einfachsten Fragen sind oft am schwersten zu beantworten.

  • Was ist unsere Mission?
  • Wer ist unser Kunde?
  • Worauf legt der Kunde Wert?
  • Was sind unsere Ergebnisse?
  • Was ist unser Plan?

Zwar geht es in dem Buch nur um “Non Profit”-Management, also um das Managen von “Non Profit” Organisationen, doch gerade diese Organisationen müssen umso straffer geführt werden, da unter anderem die Mittel für Fehltritte fehlen.

Die oben gestellten Fragen zielen auf die Selbsteinschätzung eines Unternehmens ab. Und das ist glaube ich auch der Punkt. Es geht um die tourliche retrospektive.

Allerdings geht dabei nichts ohne Vertrauen. Nur Vertrauen ermöglicht es, dass abweichende Meinungen öfter Vorgebracht werden. Ein nettes Zitat von Aristoteles:

In den wesentlichen Dingen Einheit, im Handeln Freiheit, und bei allen Dingen Vertrauen.

Mission steht in diesem Zusammenhang für das Was. Also was machen wir, nicht wie machen wir es. Was wollen wir erreichen, nicht wie wollen wir es erreichen. Am Ende sollte dann ein Plan entstehen, das wäre ein messbares Ergebnis, ein fokussierter Aktionsplan.

Sie soll:

  • soll jedem Mitarbeiter bekannt sein. (grundlegende Führungsverantwortung)
  • soll auf ein T-Shirt passen.

Wichtig ist: Gutes sollte man nur dann tun, wenn es zur Mission passt.

Wenn man von den Mitarbeitern Selbständigkeit einfordert bedeutet dies Freiheit und Verantwortung zu übergeben.

Jedes noch so gute Unternehmen kann ohne Kunden nicht überleben. Die Frage nach dem Kunden ist gleichzeitig die Frage nach dem Wer muss zufriedengestellt werden. Oft gibt es nicht nur Hauptkunden sondern auch Nebenkunden. Dabei gilt es die Prioritäten klar zu legen. Dabei kann man sich den Kunden auch selbst erschaffen. Noch besser als Kunden sind allerdings Fans.

Wert oder auf Englisch eben value ist das was wir unserem Kunden liefern müssen, damit er wirklich zufrieden ist. Dabei sind nicht nur die Hypothesen wichtig, man kann auch mal den Kunden zu fragen was ihm wirklich wichtig ist.

Retrospektiven, was haben wir für Ergebnisse erzielt. Die Mission mit dem tatsächlich erreichten vergleichen. Das ist oft sehr schwer, auch wird dieser Punkt gern vergessen. Wenn es gut läuft, denkt man nicht daran, wenn es nicht so gut läuft hat man vermeintlich keine Zeit. Aber nur die Rückschau erlaubt es den Plan zu verfeinern.

Der Plan verrät uns, ob wir noch auf schiene sind. Müssen wir die Mission ändern, oder passt unser Leitbild noch. Eine alternative zu einem Plan ist eine Vision. Allerdings sollte man beachten, wenn man mehr als fünf Ziele hat, dann hat man gar keine Ziele.


Ich hoffe ich habe noch nicht zu viel verraten. Das Buch beantwortet die Fragen in einem Detailgrad, der am Ende noch Spielraum für einen selbst lässt. Mich hat es angeregt zu träumen. Träumen von einer Organisation wie ich sie gerne führen würde. Peter F. Drucker ist für mich aufgestiegen zu einem der führenden Management Vordenker. Interessant wäre eine Synopse der Texte von Drucker und anderen Management Autoren wie z.B. Tom Demarco. Vielleicht könnte diese Idee jemand umsetzen.

Der eigenen Rolle bewusst werden

In einem Unternehmen kann leider nicht immer alles ganz rund laufen, das hat verschiedenste Gründe. Aber darauf möchte ich hier gar nicht weiter eingehen. Als Mitarbeiter ist man dann oft versucht die Probleme zu identifizieren und am liebsten fängt man da mal nicht bei den eigenen Problemen an.

He should mind his own business. (Er soll vor der eigenen Haustüre kehren) - Idiom

Ich möchte das hier mal mit einem Schneeballsystem vergleichen. Wenn sich jeder darum kümmert, dass er optimal seine Leistung bringen kann. Jeder aber auch die Dinge die Ihn daran hindern nach oben tragen würde zu seinem Vorgesetzten. Dann würde sich eine kleine Produktivitätslawine in Gang setzten, die sich schwer stoppen liese.

“Wenn sich jeder um sich selbst kümmert, ist für alle gesorgt.” - Aus der Schweiz

Ich bin zwar immer noch der Meinung, dass man durch geschickte Führung aus eine 5-8 Personen Team ein High-Perfomance-Team formen kann. Aber was machen, wenn sich das leider nicht ergibt. Wie kann man sich trotzdem professionell verhalten.

Mind your own business!

Man muss sich zu jeder Zeit seiner Rolle bewusst sein, oder eben die Rolle neu ausstecken. Dazu können die folgenden Fragen helfen:

  • Was spiele ich für eine Rolle in diesem Projekt, Meeting, Gruppe, Unternehmen?

  • Was sind meine Aufgaben, was habe ich für Pflichten?

  • Wann ist meine Aufgabe erledigt?

  • Wann muss ich meine Aufgaben erledigt haben?

  • Wen und wie muss ich informieren?

Ein Kollege von mir hat mal gesagt: “Verhalte dich so, als wärst du eine eigene Firma innerhalb des Unternehmens.”

Mit diesem Satz im Kopf möchte ich gerade noch einen Gedanken an diesen Text anknüpfen.

In einem letzten Gespräch wo auch ein Projektverantwortlicher teil nahm, wurde das Thema Tests angesprochen. Darauf hin antwortete der Projektverantwortliche mit den Worten, wenn es zeitlich eng wird, verzichten wir auf die Tests. Dazu meine Fragen die ich nur so in den Raum stellen möchte:

1. Haben sie schon mal an einem Projekt mitgearbeitet wo es am Ende nicht zeitlich eng geworden ist?

2. Wie würden sie sich verhalten, wenn sie als Firma den Auftrag bekommen würden, würden sie trotzdem Tests schreiben?

JSF Komponenten in JavaScript identifizieren, oder wie kommt man an die clientID einer Komponente

Generelle Patentrezepte gibt es auch hier nicht, aber ich möchte verschiedene Anwendungsszenarien aufzeigen, die Ihnen vielleicht helfen können einige knifflige JSF JavaScript Problemchen zu lösen.

Die einfachste Art an eine Komponenten Id zu kommen ist sicherlich folgende:

1
2
3
<h:inputtext binding="#{fullName}" value="#{fullName}">
</h:inputtext>
#{fullName.clientId}

Somit kann man einfach auf die Id zugreifen und diese z.B. in JavaScripts verwenden.

Für JavaScript bietet sich JQuery an, mit JQuery kann man leicht ein Dom Objekt identifizieren:

1
2
3
$('#{fullName.clientId}'.replace(/:/g,"\\:"))
oder
$('[@id=#{fullName.clientId}]')

Das Problem im ersten fall ist, dass alle ‘:’ escaped werden müssen, darum die replace Funktion, im zweiten Fall ist das nicht notwendig, da über das id Attribut gesucht wird.

Allerdings kommt man so nicht immer zum Ziel und ich gehe oft darauf über, über Klassen zu referenzieren, vorallem dann wenn man über eine Komponente innerhalb einer ui:repeat referenzieren will, ist das oftmals kein Fehler:

1
2
<h:inputText id="value"styleClass="#{field.name} #{page.id}"
value="#{field.value}"></h:inputText>

Zugreifen kann man dann über:

1
$('.#{field.name}.#{page.id}')

Das Ganze ist hier natürlich nur Theorie. In der Praxis wir man den JavaScript-Code z.B. über ein ClientBehavior rendern.

Public Id Generator

Ein PublicIdGenerator macht in JSF an mehreren Stellen Sinn. Hier möchte ich kurz wo es Sinn machen kann, und warum. Zum andern zeige ich euch dann den Code für den PublicIdGenerator. Die Verwendung ist glaube ich selbsterklärend.

Wo kann man den Generator verweden

  • Wenn man die interne (Datenbank) Id einer Klasse (Entität) nicht nach außen geben will.
  • Wenn man noch gar keine interne Id einer Klasse hat, weil eben diese z.B. noch nicht persistiert wurde.

Im Wesentlichen lassen sich alle Anwendungsszenarien darauf zurück führen. Wie in einem vorhergehenden Artikel beschrieben, kann man diese Id für die Generierung eine Style-Class verwenden, und dann nochmal in einem CientBehavior um JavaScript-Code zu generieren. Oder man benötigt sie für die Identifiezierung eines Objectes in Comboboxen, da bietet sich ein einfacher Object Konverter an.

Generator Code

Der Generator ist eigentlich straightforward implementiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@ViewAccessScoped
@Named
public class PublicIdGenerator implements Serializable {
private Map<String, Key> publicIds;
private Map<Key, String> objects;
protected PublicIdGenerator() {
publicIds = new HashMap<String, Key>();
objects = new HashMap<Key, String>();
}
public String generatePublicId(final Object object) {
return generatePublicId(object.getClass(), object);
}
public String generatePublicId(final Class<?> clazz, final Object object) {
final String publicId;
final Key key = new Key(clazz, object);
if (objects.containsKey(key)) {
publicId = objects.get(key);
} else {
publicId = generateId();
publicIds.put(publicId, key);
objects.put(key, publicId);
}
return publicId;
}
private String generateId() {
return UUID.randomUUID().toString();
}
public Object lookup(final Class<?> clazz, final String publicId) {
Key key = publicIds.get(publicId);
if (key == null) {
throw new IllegalStateException("No entry for public id " + publicId + ". Possible manipulation detected.");
}
if (!clazz.equals(key.getClazz())) {
throw new IllegalStateException("Invalid clazz " + clazz.getName() + " for public id " + publicId);
}
return key.getObject();
}
private static class Key implements Serializable {
private final Class<?> clazz;
private final Object object;
Key(final Class<?> clazz, final Object object) {
super();
this.clazz = notNull(clazz, "Parameter 'clazz' must not be 'NULL'");
this.object = notNull(object, "Parameter 'object' must not be 'NULL'");
}
Class<?> getClazz() {
return clazz;
}
Object getObject() {
return object;
}
//TODO Generate Equals and HashCode
}
}

Java Art - Puzzle 1

Java also can be art.

But what is the result of the execution.

1
2
3
4
5
6
7
8
9
10
11
public class Zero {
public static void main(String[] args) {
int s = 10;
System.out.println(s++ - --s);
System.out.println(++s - s--);
System.out.println(s-- - ++s);
System.out.println(--s - s++);

System.out.println(s++ + --s + s++ + --s);
}
}

Singleton the Highlander way

Singleton Implementierungen gibt es verschiedenste, aber möchte man wirklich nur eine Instanz eines Objektes sollte man es nach der Highlander Methode machen.

Egal ob man noch auf dem Memory Modell von java < 1.5 oder eben nach dem Fix von 1.5 arbeitet, diese Methode sollte immer funktionieren.
Und wer hats erfunden? Bill Pugh in seiner arbeit an dem Java Memory Model.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Highlander {
private Highlander() {
// Singleton
}

private static class SingletonHolder {
public static final Highlander SINGLETONHOLDER = new Highlander();
}

public static Highlander getInstance() {
return SingletonHolder.SINGLETONHOLDER;
}
}

JSF Bootstrap Message and Messages Renderer

Add the JSF Bootstrap Render to your Page to view the JSF Messages in Bootstrap Style.

view

Here you can find the Code Snippets.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package at.freelenzer.jsftest.bootstrap;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.component.UIComponent;
import javax.faces.component.UIMessage;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.FacesRenderer;

import com.sun.faces.renderkit.Attribute;
import com.sun.faces.renderkit.AttributeManager;
import com.sun.faces.renderkit.RenderKitUtils;
import com.sun.faces.renderkit.html_basic.MessageRenderer;

@FacesRenderer(componentFamily = "javax.faces.Message", rendererType = "javax.faces.Message")
public class BootstrapMessageRenderer extends MessageRenderer {
private static final Attribute[] ATTRIBUTES = AttributeManager
.getAttributes(AttributeManager.Key.MESSAGESMESSAGES);

@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
super.encodeBegin(context, component);
}

@Override
public void encodeEnd(FacesContext context, UIComponent component)
throws IOException {
rendererParamsNotNull(context, component);

if (!shouldEncode(component))
return;

boolean mustRender = shouldWriteIdAttribute(component);

UIMessage messages = (UIMessage) component;
ResponseWriter writer = context.getResponseWriter();
assert (writer != null);

String clientId = ((UIMessage) component).getFor();

@SuppressWarnings("unchecked")
Iterator<FacesMessage> messageIter = getMessageIter(context, clientId,
component);

assert (messageIter != null);

if (!messageIter.hasNext()) {
if (mustRender) {
if ("javax_faces_developmentstage_messages".equals(component
.getId())) {
return;
}
writer.startElement("div", component);
writeIdAttributeIfNecessary(context, writer, component);
writer.endElement("div");
}
return;
}

writeIdAttributeIfNecessary(context, writer, component);

// style is rendered as a passthru attribute
RenderKitUtils.renderPassThruAttributes(context, writer, component,
ATTRIBUTES);

Map<Severity, List<FacesMessage>> msgs = new HashMap<Severity, List<FacesMessage>>();
msgs.put(FacesMessage.SEVERITY_INFO, new ArrayList<FacesMessage>()); // Bootstrap
// info
msgs.put(FacesMessage.SEVERITY_WARN, new ArrayList<FacesMessage>()); // Bootstrap
// warning
msgs.put(FacesMessage.SEVERITY_ERROR, new ArrayList<FacesMessage>()); // Bootstrap
// error
msgs.put(FacesMessage.SEVERITY_FATAL, new ArrayList<FacesMessage>()); // Bootstrap
// error

while (messageIter.hasNext()) {
FacesMessage curMessage = (FacesMessage) messageIter.next();

if (curMessage.isRendered() && !messages.isRedisplay()) {
continue;
}
msgs.get(curMessage.getSeverity()).add(curMessage);
}

List<FacesMessage> severityMessages = msgs
.get(FacesMessage.SEVERITY_FATAL);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_FATAL, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_ERROR);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_ERROR, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_WARN);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_WARN, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_INFO);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_INFO, severityMessages);
}
}

private void encodeSeverityMessages(FacesContext facesContext,
UIComponent component, UIMessage uiMessages, Severity severity,
List<FacesMessage> messages) throws IOException {
ResponseWriter writer = facesContext.getResponseWriter();

String alertSeverityClass = "";

if (FacesMessage.SEVERITY_INFO.equals(severity)) {
alertSeverityClass = "alert-info";
} else if (FacesMessage.SEVERITY_WARN.equals(severity)) {
alertSeverityClass = ""; // Default alert is a warning
} else if (FacesMessage.SEVERITY_ERROR.equals(severity)) {
alertSeverityClass = "alert-error";
} else if (FacesMessage.SEVERITY_FATAL.equals(severity)) {
alertSeverityClass = "alert-error";
}

writer.startElement("div", null);
writer.writeAttribute("class", "alert " + alertSeverityClass, "alert "
+ alertSeverityClass);

for (FacesMessage msg : messages) {
String summary = msg.getSummary() != null ? msg.getSummary() : "";
String detail = msg.getDetail() != null ? msg.getDetail() : summary;

if (uiMessages.isShowSummary()) {
writer.startElement("strong", component);
writer.writeText(summary, component, null);
writer.endElement("strong");
}

if (uiMessages.isShowDetail()) {
writer.writeText(" " + detail, null);
}
msg.rendered();
}
writer.endElement("div");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package at.freelenzer.jsftest.bootstrap;

import java.io.IOException;
import java.util.Iterator;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIMessages;
import javax.faces.context.FacesContext;
import javax.faces.render.FacesRenderer;
import javax.faces.context.ResponseWriter;

import com.sun.faces.renderkit.Attribute;
import com.sun.faces.renderkit.AttributeManager;
import com.sun.faces.renderkit.RenderKitUtils;
import com.sun.faces.renderkit.html_basic.MessagesRenderer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage.Severity;

@FacesRenderer(componentFamily = "javax.faces.Messages", rendererType = "javax.faces.Messages")
public class BootstrapMessagesRenderer extends MessagesRenderer {

private static final Attribute[] ATTRIBUTES = AttributeManager
.getAttributes(AttributeManager.Key.MESSAGESMESSAGES);

@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
super.encodeBegin(context, component);
}

@Override
public void encodeEnd(FacesContext context, UIComponent component)
throws IOException {
rendererParamsNotNull(context, component);

if (!shouldEncode(component))
return;

boolean mustRender = shouldWriteIdAttribute(component);

UIMessages messages = (UIMessages) component;
ResponseWriter writer = context.getResponseWriter();
assert (writer != null);

String clientId = ((UIMessages) component).getFor();
if (clientId == null)
if (messages.isGlobalOnly())
clientId = "";

@SuppressWarnings("unchecked")
Iterator<FacesMessage> messageIter = getMessageIter(context, clientId,
component);

assert (messageIter != null);

if (!messageIter.hasNext()) {
if (mustRender) {
if ("javax_faces_developmentstage_messages".equals(component
.getId())) {
return;
}
writer.startElement("div", component);
writeIdAttributeIfNecessary(context, writer, component);
writer.endElement("div");
}
return;
}

writeIdAttributeIfNecessary(context, writer, component);

// style is rendered as a passthru attribute
RenderKitUtils.renderPassThruAttributes(context, writer, component,
ATTRIBUTES);

Map<Severity, List<FacesMessage>> msgs = new HashMap<Severity, List<FacesMessage>>();
msgs.put(FacesMessage.SEVERITY_INFO, new ArrayList<FacesMessage>()); // Bootstrap
// info
msgs.put(FacesMessage.SEVERITY_WARN, new ArrayList<FacesMessage>()); // Bootstrap
// warning
msgs.put(FacesMessage.SEVERITY_ERROR, new ArrayList<FacesMessage>()); // Bootstrap
// error
msgs.put(FacesMessage.SEVERITY_FATAL, new ArrayList<FacesMessage>()); // Bootstrap
// error

while (messageIter.hasNext()) {
FacesMessage curMessage = (FacesMessage) messageIter.next();

if (curMessage.isRendered() && !messages.isRedisplay()) {
continue;
}
msgs.get(curMessage.getSeverity()).add(curMessage);
}

List<FacesMessage> severityMessages = msgs
.get(FacesMessage.SEVERITY_FATAL);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_FATAL, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_ERROR);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_ERROR, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_WARN);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_WARN, severityMessages);
}

severityMessages = msgs.get(FacesMessage.SEVERITY_INFO);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, component, messages,
FacesMessage.SEVERITY_INFO, severityMessages);
}
}

private void encodeSeverityMessages(FacesContext facesContext,
UIComponent component, UIMessages uiMessages, Severity severity,
List<FacesMessage> messages) throws IOException {
ResponseWriter writer = facesContext.getResponseWriter();

String alertSeverityClass = "";

if (FacesMessage.SEVERITY_INFO.equals(severity)) {
alertSeverityClass = "alert-info";
} else if (FacesMessage.SEVERITY_WARN.equals(severity)) {
alertSeverityClass = ""; // Default alert is a warning
} else if (FacesMessage.SEVERITY_ERROR.equals(severity)) {
alertSeverityClass = "alert-error";
} else if (FacesMessage.SEVERITY_FATAL.equals(severity)) {
alertSeverityClass = "alert-error";
}

writer.startElement("div", null);
writer.writeAttribute("class", "alert " + alertSeverityClass, "alert "
+ alertSeverityClass);
writer.startElement("a", component);
writer.writeAttribute("class", "close", "class");
writer.writeAttribute("data-dismiss", "alert", "data-dismiss");
writer.writeAttribute("href", "#", "href");
writer.write("&times;");
writer.endElement("a");

writer.startElement("ul", null);

for (FacesMessage msg : messages) {
String summary = msg.getSummary() != null ? msg.getSummary() : "";
String detail = msg.getDetail() != null ? msg.getDetail() : summary;

writer.startElement("li", component);

if (uiMessages.isShowSummary()) {
writer.startElement("strong", component);
writer.writeText(summary, component, null);
writer.endElement("strong");
}

if (uiMessages.isShowDetail()) {
writer.writeText(" " + detail, null);
}

writer.endElement("li");
msg.rendered();
}
writer.endElement("ul");
writer.endElement("div");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
<render-kit>
<renderer>
<component-family>javax.faces.Messages</component-family>
<renderer-type>javax.faces.Messages</renderer-type>
<renderer-class>at.freelenzer.jsftest.bootstrap.BootstrapMessagesRenderer</renderer-class>
</renderer>
<renderer>
<component-family>javax.faces.Message</component-family>
<renderer-type>javax.faces.Message</renderer-type>
<renderer-class>at.freelenzer.jsftest.bootstrap.BootstrapMessageRenderer</renderer-class>
</renderer>
</render-kit>

Primefaces multifile upload in IE10

Primefaces multifile upload works in IE10.

But not out of the Box in the Community Edition. There ist a fix in the primefaces version 3.5.9.

See Group Entry

But get it work with the Community Edition is far easy.

Use the fileUpload component like you would do it in IE9.

And add the CSS styles described below.

1
2
3
4
5
<p:fileUpload fileUploadListener="#{fileUpload.handleFileUpload}"
mode="advanced" dragDropSupport="true" multiple="true"
update="messages" sizeLimit="100000" fileLimit="3"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
<p:growl id="messages" showDetail="true" />