Ejemplo n.º 1
0
  /**
   * *********************************************************** Create
   * ***********************************************************
   */
  @SuppressWarnings("rawtypes")
  private void onNodeTypeChanged() {
    ListModelList typeModel = (ListModelList) typeBox.getModel();
    Set selections = typeModel.getSelection();
    if (selections.isEmpty()) return;
    String selection = (String) selections.iterator().next();
    logger.info("Node type set to: " + selection);

    Map<String, String> ntd = GeneralUtil.getNodeDescriptionByLabel(ntds, selection);
    String nodeType = ntd.get("type");
    if (nodeType.equals(Constants.NODE_TYPE_USER)) {
      firstNameRow.setVisible(true);
      firstNameBox.setConstraint("no empty");
      lastNameRow.setVisible(true);
      lastNameBox.setConstraint("no empty");
      midNameRow.setVisible(true);
    } else {
      firstNameRow.setVisible(false);
      firstNameBox.setConstraint("");
      lastNameRow.setVisible(false);
      lastNameBox.setConstraint("");
      midNameRow.setVisible(false);
    }
  }
Ejemplo n.º 2
0
  public void render(final Comboitem item, final Object data, final int index) throws Exception {
    final Combobox cb = (Combobox) item.getParent();
    final ListModel<?> model = cb.getModel();
    final int size = model.getSize();
    final Template tm = resoloveTemplate(cb, item, data, index, size, "model");
    if (tm == null) {
      item.setLabel(Objects.toString(data));
      item.setValue(data);
    } else {
      final ForEachStatus iterStatus =
          new AbstractForEachStatus() { // provide iteration status in this context
            private static final long serialVersionUID = 1L;

            public int getIndex() {
              return index;
            }

            public Object getEach() {
              return data;
            }

            public Integer getEnd() {
              return size;
            }
          };

      final String var = (String) tm.getParameters().get(EACH_ATTR);
      final String varnm = var == null ? EACH_VAR : var; // var is not specified, default to "each"
      final String itervar = (String) tm.getParameters().get(STATUS_ATTR);
      final String itervarnm =
          itervar == null
              ? (var == null ? EACH_STATUS_VAR : varnm + STATUS_POST_VAR)
              : itervar; // provide default value if not specified

      // bug 1188, EL when nested var and itervar
      Object oldVar = cb.getAttribute(varnm);
      Object oldIter = cb.getAttribute(itervarnm);
      cb.setAttribute(varnm, data);
      cb.setAttribute(itervarnm, iterStatus);

      final Component[] items = tm.create(cb, item, null, null);

      cb.setAttribute(varnm, oldVar);
      cb.setAttribute(itervarnm, oldIter);

      if (items.length != 1)
        throw new UiException("The model template must have exactly one item, not " + items.length);

      final Comboitem nci = (Comboitem) items[0];
      nci.setAttribute(BinderImpl.VAR, varnm); // for the converter to get the value

      if (model instanceof ListSubModel) {
        // ZK-992 wrong item when binding to combbox with submodel implementation
        // combobox has a internal model as the submodel,
        // I don't have way to access the submodel, and user doesn't has info to notify model[index]
        // changed.
        // so I set the value directly.
        nci.setAttribute(varnm, data);
      } else {
        addItemReference(
            cb, nci, index, varnm); // kept the reference to the data, before ON_BIND_INIT
      }

      nci.setAttribute(itervarnm, iterStatus);

      // add template dependency
      addTemplateTracking(cb, nci, data, index, size);

      if (nci.getValue() == null) // template might set it
      nci.setValue(data);
      item.setAttribute("org.zkoss.zul.model.renderAs", nci);
      // indicate a new item is created to replace the existent one
      item.detach();

      // bug #ZK-677: combobox selection is lost after reload model
      // binding Comboitem immediately, @see BindUiLifeCycle#afterComponentAttached
      Events.sendEvent(new Event(BinderImpl.ON_BIND_INIT, nci));
    }
  }