Hi everyone, I have noticed that when some custom widgets created with the Vaadin Widget wizard are rendered fine but on the browser console I get the following error:
SEVERE: Server sent Vaadin 6 style updates for …Connector (2) but this is not a Vaadin 6 Paintable
Coul someone tell me what is this error due to? How should I fix this?
Here is the code for some custom widgets that raise this error:
IntegerTextField
and
ChromaHasPasswordField
:
First
IntegerTextField
, here is the widget:
public class IntegerTextFieldWidget extends TextBox {
public static final String CLASSNAME = "integertextfield";
public IntegerTextFieldWidget() {
setStyleName(CLASSNAME);
}
}
The connector:
@Connect(IntegerTextField.class)
public class IntegerTextFieldConnector extends AbstractComponentConnector {
private static final long serialVersionUID = 1L;
public IntegerTextFieldConnector() {
getWidget().addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
if (!Character.isDigit(event.getCharCode()))
getWidget().cancelKey();
}
});
}
@Override
protected Widget createWidget() {
return GWT.create(IntegerTextFieldWidget.class);
}
@Override
public IntegerTextFieldWidget getWidget() {
return (IntegerTextFieldWidget) super.getWidget();
}
@Override
public IntegerTextFieldState getState() {
return (IntegerTextFieldState) super.getState();
}
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
final String text = getState().text;
getWidget().setText(text);
}
}
The shared state:
public class IntegerTextFieldState extends com.vaadin.shared.ui.textfield.AbstractTextFieldState {
}
And the server side component:
public class IntegerTextField extends com.vaadin.ui.TextField {
public IntegerTextField() {
}
@Override
public String getValue(){
return getState().text;
}
@Override
public void setValue(String value) {
getState().text = value;
}
@Override
public IntegerTextFieldState getState() {
return (IntegerTextFieldState) super.getState();
}
}
And here is the ChromaHashPasswordField component:
The widget:
public class ChromaHashPasswordFieldWidget extends Composite {
public static final String CLASSNAME = "chromahashpasswordfield";
private PasswordTextBox textBox = new PasswordTextBox();
private HTML chromaHashStripes = new HTML();
private HorizontalPanel panel = new HorizontalPanel();
private int numberStripes = 3;
public ChromaHashPasswordFieldWidget() {
initWidget(panel);
setStyleName(CLASSNAME);
panel.add(textBox);
panel.add(chromaHashStripes);
}
private String[] getChromaHash(String text, int numberStripes) {
String salt = "du467e4aSdfe";
text += salt;
String[] colors = new String[numberStripes]
;
int hash;
int part = text.length() / numberStripes;
for (int i = 0; i < numberStripes; i++) {
hash = text.substring(part * i,
(part * i) + part).hashCode();
colors[i]
= "#" + intToRGB(hash);
}
return colors;
}
public String intToRGB(int i) {
String RGB = Integer.toHexString(((i >> 16) & 0xFF))
+ Integer.toHexString(((i >> 8) & 0xFF))
+ Integer.toHexString((i & 0xFF));
while (RGB.length() < 6) {
RGB += "0";
}
return RGB;
}
public void updateChromaHashStripes() {
String[] chromaHash = getChromaHash(getText(), numberStripes);
int height = 18;
int width = 6;
String htmlStripes = "<div style=\"margin: 3px;\">";
for (int i = 0; i < numberStripes; i++) {
htmlStripes += "<div style=\"background-color: "+ chromaHash[i]
+ ";"
+ " float: left; height: "+ height + "px;"
+ " width: "+ width +"px;\">"
+"</div>";
}
htmlStripes += "</div>";
chromaHashStripes.setPixelSize(height * 2, width * numberStripes);
chromaHashStripes.setHTML(htmlStripes);
}
public String getText() {
return textBox.getText();
}
public void setText(String text) {
textBox.setText(text);
}
public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
return textBox.addKeyUpHandler(handler);
}
}
The connector:
@Connect(ChromaHashPasswordField.class)
public class ChromaHashPasswordFieldConnector extends AbstractComponentConnector {
/**
*
*/
private static final long serialVersionUID = 1L;
public ChromaHashPasswordFieldConnector() {
getWidget().addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
getWidget().updateChromaHashStripes();
}
});
}
@Override
protected Widget createWidget() {
return GWT.create(ChromaHashPasswordFieldWidget.class);
}
@Override
public ChromaHashPasswordFieldWidget getWidget() {
return (ChromaHashPasswordFieldWidget) super.getWidget();
}
@Override
public ChromaHashPasswordFieldState getState() {
return (ChromaHashPasswordFieldState) super.getState();
}
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
final String text = getState().text;
getWidget().setText(text);
getWidget().updateChromaHashStripes();
}
}
The shared state:
public class ChromaHashPasswordFieldState extends com.vaadin.shared.ui.textfield.AbstractTextFieldState {
{
primaryStyleName = null;
}
}
And the server side component:
public class ChromaHashPasswordField extends com.vaadin.ui.PasswordField {
/**
*
*/
private static final long serialVersionUID = 1L;
public ChromaHashPasswordField() {
}
@Override
public ChromaHashPasswordFieldState getState() {
return (ChromaHashPasswordFieldState) super.getState();
}
@Override
public String getValue() {
return super.getValue();
}
@Override
public void setValue(String value) {
getState().text = value;
}
}
And when I use these components, I get the above error:
[code]
…
@Override
protected void init(VaadinRequest request) {
VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
layout.addComponents(new ChromaHashPasswordField(), new IntegerTextField());
}
…
[/code]For both:
SEVERE: Server sent Vaadin 6 style updates for ChromaHashPasswordFieldConnector but this is not a Vaadin 6 Paintable
SEVERE: Server sent Vaadin 6 style updates for IntegerTextFieldConnector but this is not a Vaadin 6 Paintable
How can I fix this?