Ich muss eine Klasse zu einer Komponente hinzufügen. Ich kann die Komponente nicht über Ajax hinzufügen, da dies ein Problem mit der Eingabe ist. Mein Code ist:Wie kann ich Attribute ändern, ohne die Komponente in Wicket hinzuzufügen?
private ListView<Opzioni> setListOpzioni(boolean b) {
return new ListView<Opzioni>("list_opzioni", opzioniDao.findAll()) {
@Override
protected void populateItem(ListItem<Opzioni> item) {
erroriAssociatiAlTextField = new HashMap<>();
List<Opzioni> opzioniCron = opzioniDao.getOpzioniFormatore();
final Opzioni o = item.getModelObject();
final WebMarkupContainer errorContainer = new WebMarkupContainer("errorContainer");
errorContainer.setOutputMarkupId(true);
errorContainer.setOutputMarkupPlaceholderTag(true);
Boolean isSelected = false;
Boolean isAzienda = o.getAzienda() != null ? o.getAzienda().equals(getAziendaLogged()) : false;
if (isAdminFormatore(getUserLogged())) {
isSelected = o.getControlFormatore() || isAzienda;
} else {
isSelected = isAzienda;
}
Boolean visibile = isSa || isSelected;
Label name_op = new Label("name_op", o.getName());
item.add(name_op.setVisible(visibile));
TextField val_op = new TextField("val_op", new PropertyModel(o, "val"));
val_op.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
if (opzioniCron.contains(o)) {
controllaStringa(o);
}
if (valoriScorretti == true) {
contatore++;
} else {
contatore = 0;
}
if (contatore > 0) {
ciSonoErrori = true;
String error = "Valori inseriti nel box " + o.getName() + " non corretti";
if (!erroriAssociatiAlTextField.containsKey(o)) {
erroriAssociatiAlTextField.put(o, error);
}
for (Map.Entry<Opzioni, String> map : erroriAssociatiAlTextField.entrySet()) {
val_op.error(map.getValue());
}
art.add(errorContainer.setVisible(true));
refreshFp(art);
art.add(save_btn.setVisible(false));
} else {
ciSonoErrori = false;
if (!erroriAssociatiAlTextField.isEmpty()) {
art.add(save_btn.setVisible(false));
if (erroriAssociatiAlTextField.containsKey(o)) {
erroriAssociatiAlTextField.remove(o);
}
for (Map.Entry<Opzioni, String> map : erroriAssociatiAlTextField.entrySet()) {
val_op.error(map.getValue());
}
}
if (erroriAssociatiAlTextField.isEmpty()) {
art.add(save_btn.setVisible(true));
}
art.add(errorContainer.setVisible(false));
refreshFp(art);
}
}
});
item.add(val_op.setEnabled(b).setVisible(visibile));
item.add(errorContainer.setVisible(false));
if (visibile) {
o.setModificato(true);
} else {
o.setModificato(false);
}
}
};
}
Mit diesem Code jedes Mal, wenn ein Benutzer einfügen einen Brief in das Feld der Cursor auf die erste Position gehen und es ist unmöglich, es zu benutzen. Gibt es einen alternativen Modus, um die Klasse dynamisch hinzuzufügen?
Dies ist nicht der gesamte Code, es ist nur zu versuchen, mein Problem zu erklären. Ich muss eine Eingabe validieren, die Eingabe, die ich hatte, muss eine Liste der Nummer sein, die durch ein Komma (',') geteilt wird. Das Steuerelement ist in Echtzeit und die Klasse append wird verwendet, um den Fehler zu unterstreichen. Das Verhalten, das ich will, ist das in diesem Link erklärte [Link] (http://www.mkyong.com/jquery/how-to-add-remove-css-class-dynamically-in-jquery/). Das Problem ist, ich möchte dies in Wicket erhalten –
Okay, ich verstehe immer noch nicht, warum Sie die Fehlerklasse in OnUpdate stattdessen in der OnError-Methode hinzufügen, aber ich denke, ich könnte eine schnelle Lösung haben. (Wird Antwort bearbeiten) –
, weil ich diesen Code in einem Element eines ListView hatte. Irgendwelche vorschlagen? –