Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不在Wicket中添加组件的情况下修改属性?_Java_Ajax_Wicket - Fatal编程技术网

Java 如何在不在Wicket中添加组件的情况下修改属性?

Java 如何在不在Wicket中添加组件的情况下修改属性?,java,ajax,wicket,Java,Ajax,Wicket,我必须向组件添加一个类。我无法通过ajax添加组件,因为这是输入的问题。我的代码是: private ListView<Opzioni> setListOpzioni(boolean b) { return new ListView<Opzioni>("list_opzioni", opzioniDao.findAll()) { @Override protected void populateItem(ListItem<

我必须向组件添加一个类。我无法通过ajax添加组件,因为这是输入的问题。我的代码是:

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);
                }
            }
        };
    }
private ListView setListOpzioni(布尔b){
返回新的ListView(“list_opzioni”,opzioniDao.findAll()){
@凌驾
受保护的void populateItem(列表项){
erroriAssociatiAlTextField=新HashMap();
List opzioniCron=opzioniDao.getOpzioniFormatore();
final Opzioni o=item.getModelObject();
最终WebMarkupContainer errorContainer=新的WebMarkupContainer(“errorContainer”);
errorContainer.setOutputMarkupId(true);
errorContainer.setOutputMarkupPlaceholderTag(true);
布尔值=假;
布尔值isAzienda=o.getAzienda()!=null?o.getAzienda().equals(GetAziendAloged()):false;
if(isAdminInformation(getUserLogged())){
isSelected=o.getControlFormatore()| | isAzienda;
}否则{
isSelected=isAzienda;
}
布尔可视性=isSa | | isSelected;
Label name_op=新标签(“name_op”,o.getName());
添加(名称和操作设置可见(可视));
TextField val_op=新的TextField(“val_op”,新属性模型(o,“val”);
val_op.add(新的OnChangeAjaxBehavior(){
@凌驾
受保护的void onUpdate(AjaxRequestTarget艺术){
if(光学显微镜包含(o)){
a(o);
}
if(valoriScorretti==true){
contatore++;
}否则{
contatore=0;
}
如果(续>0){
ciSonoErrori=真;
String error=“Valori inseriti nel box”+o.getName()+“non-corretti”;
如果(!erroriAssociatiAlTextField.containsKey(o)){
erroriAssociatiAlTextField.put(o,错误);
}
对于(Map.Entry Map:erroriassocialatextfield.entrySet()){
值操作错误(map.getValue());
}
艺术添加(errorContainer.setVisible(true));
(艺术);
艺术添加(保存设置可见(假));
}否则{
ciSonoErrori=假;
如果(!erroriAssociatiAlTextField.isEmpty()){
艺术添加(保存设置可见(假));
if(erroriassociatiatextfield.containsKey(o)){
erroriAssociatiAlTextField.删除(o);
}
对于(Map.Entry Map:erroriassocialatextfield.entrySet()){
值操作错误(map.getValue());
}
}
if(erroriAssociatiAlTextField.isEmpty()){
艺术添加(保存设置可见(真));
}
艺术添加(errorContainer.setVisible(false));
(艺术);
}
}
});
添加(val_op.setEnabled(b).setVisible(visibile));
item.add(errorContainer.setVisible(false));
if(可视){
o、 setModificato(真);
}否则{
o、 setModificato(假);
}
}
};
}
使用此代码,每次用户在字段中插入字母时,光标都会移动到第一个位置,因此无法使用它。是否有其他模式可以动态添加类

每次用户在字段内插入字母时,使用此代码 光标移到第一个位置,无法使用它

这是因为您使用的OnChangeAjax行为。 此行为在每次用户输入后检查FormComponent是否验证正确,如果验证正确,将调用onUpdate方法

对于未添加IValidator的TextField,这意味着在每次输入后调用onUpdate。如果随后通过AjaxRequestTarget重新打印TextField,则会得到一个输入字段的行为,在该字段中,您可以像当前一样键入“向后”

如何在不在Wicket中添加组件的情况下修改属性

如果您希望所做的更改在浏览器中可见,那么您需要在某个时候使用ajax更新组件。这是没有办法的

你可能不得不重新考虑你是一个傻瓜,因为你现在所做的没有多大意义

当您有一个TextField时,当用户输入有效的内容时,您将css类“field error”添加到html输入中

  • 当用户输入无效的内容时,不应该反过来添加“字段错误”吗
  • 您真的想在用户输入内容时验证并执行ajax更新吗?为什么不在表单/文本字段实际提交时或用户在字段中输入完毕时验证输入
  • 编辑

    您可以使用AjaxRequestTarget发送jQuery命令将css类添加到输入,而不是使用AjaxRequestTarget更新输入:

    val_op.setOutputMarkupId(true);
    val_op.add(new OnChangeAjaxBehavior() {
         @Override
         protected void onUpdate(AjaxRequestTarget art) {
              art.appendJavaScript("$('#"+val_op.getMarkupId()+"').addClass('field-error');");
        }
    }
    
    这将不通过ajax更新整个输入,而是发送一个jQuery Javascript以在AjaxResponse中执行。然后,您可以在链接的页面中执行Javascript调用,添加css类将在客户端完成

    您唯一需要的是输入的id,以便jquery可以找到它。因此,setOutputMarkupId必须设置为true,然后可以通过调用getMarkupId()和i获取wicket创建的id
    val_op.setOutputMarkupId(true);
    val_op.add(new OnChangeAjaxBehavior() {
         @Override
         protected void onUpdate(AjaxRequestTarget art) {
              art.appendJavaScript("$('#"+val_op.getMarkupId()+"').removeClass('field-error');");
        }
    
         @Override
         protected void onError(AjaxRequestTarget art, RuntimeException e) {
              art.appendJavaScript("$('#"+val_op.getMarkupId()+"').addClass('field-error');");
        }
    }