コンポーネントにクラスを追加する必要があります。これは入力に問題があるため、コンポーネントをajax経由で追加することはできません。私のコードは次のとおりです。このコードでWicketでコンポーネントを追加せずに属性を変更するにはどうすればよいですか?
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);
}
}
};
}
ユーザーがフィールド内にカーソルを文字を挿入するたびに、最初の位置に移動し、それはそれを使用することは不可能です。クラスを動的に追加するための代替モードはありますか?
これはコード全体ではなく、私の問題を説明しようとしています。私は入力を検証しなければなりませんでしたが、入力はカンマ( '、')で分割された数値のリストでなければなりませんでした。コントロールはリアルタイムで、クラスiを追加するとエラーに下線が引かれます。 私が望む振る舞いはこのリンク[リンク](http://www.mkyong.com/jquery/how-to-add-remove-css-class-dynamically-in-jquery/)で説明されているものです。問題は私がwicketでこれを取得したいということです。 –
これで、onErrorメソッドの代わりにonUpdateクラスにエラークラスを追加する理由はわかりませんが、すばやく修正できると思います。 (回答を編集する) –
私はこのコードをlistViewの項目の中に持っていたからです。どんな提案? –