Apache Wicket 7:如何将行为添加到封闭内部的标签?

huangapple go评论88阅读模式
英文:

Apache wicket 7: how to add a behavior to a label inside enclosure?

问题

<label class="col-sm-4 control-label">Vorlage</label>
英文:

I have a legacy block of code as shown:

<wicket:enclosure >
   <div class="form-group">
       <label class="col-sm-4 control-label">Vorlage</label>
       <div class="col-sm-8 form-control-static" wicket:id="referencedAeCode">XYZ</div>
   </div>
</wicket:enclosure>

and the corresponding java code is:

add(newReferenceCodeLabel("referencedAeCode")); 

where the impl. of newReferenceCodeLabel() is:

private Label newReferenceCodeLabel(final String id) {
    return new Label(id, new AbstractReadOnlyModel<String>() {

        private static final long serialVersionUID = 5340631294817017953L;

        @Override
        public String getObject() {
        final Element element = getElement();
        String code = element.getCode ();
        if (element instanceof Thing
              && element.getACode().equals(code)) {
                 code = null;
            }
            return code;
        }
     });
    }

Now, I want to add a wicket behavior (using the add() method) to the Label itself inside the enclosure, what currently happening is the behavior being added to the whole enclosure.

<label class="col-sm-4 control-label">Vorlage</label>

答案1

得分: 0

你没有展示添加行为的代码,所以不清楚为什么会表现出这种行为。

但我建议您将基于标记的封装(<wicket:enclosure>)替换为显式的基于Java的对应项 - EnclosureContainer

新的标记:

<div wicket:id="referencedAeCodeEnclosure" class="form-group">
   <label class="col-sm-4 control-label">Vorlage</label>
   <div class="col-sm-8 form-control-static" wicket:id="referencedAeCode">XYZ</div>
</div>

新的Java代码:

private Label newReferenceCodeLabel(final String id) {
  Label label = new Label(id, new AbstractReadOnlyModel<String>() {

    private static final long serialVersionUID = 5340631294817017953L;

    @Override
    public String getObject() {
      final Element element = getElement();
      String code = element.getCode ();
      if (element instanceof Thing
          && element.getACode().equals(code)) {
             code = null;
      }
      return code;
    }
 });
 label.add(someBehavior);
 return label;
}
...
Label label = newReferenceCodeLabel("referencedAeCode");
EnclosureContainer container = new EnclosureContainer("referencedAeCodeEnclosure", label);
container.add(label); 
add(container);
}
英文:

You didn't show us the code that adds the Behavior so it is not clear why it behaves this way.

But I'd recommend you to replace the markup-based enclosure ( &lt;wicket:enclosure&gt;) with the explicit Java-based counterpart - EnclosureContainer:

New markup:

&lt;div wicket:id=&quot;referencedAeCodeEnclosure&quot; class=&quot;form-group&quot;&gt;
   &lt;label class=&quot;col-sm-4 control-label&quot;&gt;Vorlage&lt;/label&gt;
   &lt;div class=&quot;col-sm-8 form-control-static&quot; wicket:id=&quot;referencedAeCode&quot;&gt;XYZ&lt;/div&gt;
&lt;/div&gt;

New Java code:

private Label newReferenceCodeLabel(final String id) {
  Label label = new Label(id, new AbstractReadOnlyModel&lt;String&gt;() {

    private static final long serialVersionUID = 5340631294817017953L;

    @Override
    public String getObject() {
      final Element element = getElement();
      String code = element.getCode ();
      if (element instanceof Thing
          &amp;&amp; element.getACode().equals(code)) {
             code = null;
      }
      return code;
    }
 });
 label.add(someBehavior);
 return label;
}
...
Label label = newReferenceCodeLabel(&quot;referencedAeCode&quot;);
EnclosureContainer container = new EnclosureContainer(&quot;referencedAeCodeEnclosure&quot;, label);
container.add(label); 
add(container);
}

huangapple
  • 本文由 发表于 2023年6月15日 09:27:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/76478510.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定