Как добавить существующие компоненты JSF к моим собственным компонентам?

Причина проста: elif player != n1 or n2 не совпадает с elif player != n1 or player != n2.

player != n1 or n2 совпадает с (player != n1) or (bool(n2)). Другими словами, пока n2 является «правдивым» (то, что при преобразовании в логическое значение будет True), player != n1 or n2 будет True. Поскольку n2 всегда отлично от нуля int, это всегда верно, и поэтому ваше условие if всегда будет успешным.

Кроме того, вы изменяете значения player, n1 и n2 только вне вашего цикла while. Это означает, что ваш код внутри этого цикла всегда будет идти по одному и тому же пути! Судя по вашему коду, я думаю, вы хотите player = int(input("Select a room from 1 to 9: ")) внутри цикла.

В качестве отступления: если вы когда-либо находились в ситуации, когда вы хотели сравнить неравенство со многими переменными (что-то вроде player != n1 or player != n2 or player != n3...), вы могли бы вместо этого использовать player in [n1, n2, n3...].

5
задан Chris Dale 17 March 2009 в 13:35
поделиться

2 ответа

Вы не можете использовать ResponseWriter, как Вы хотите. Двумя путями я могу думать, как добавить, что дочерние элементы управления программно любой через обязательный атрибут (см. этот ответ), или в месте, где средства управления обычно создаются (в JSPs, который находится в классе тега).

Существует два пути к компонентам JSF для содержания других средств управления: как дети или как названный фасетами. Компоненты всегда управляют, как они представляют свои фасеты; если они должны представить своих детей, они должны возвратить true для getRendersChildren.

Это не тестируется код, но последовательность проходит примерно так:

  @Override
  public boolean getRendersChildren() {
    return true;
  }

  @Override
  public void encodeBegin(FacesContext context)
      throws IOException {
    // should really delegate to a renderer, but this is only demo code
    ResponseWriter writer = context.getResponseWriter();
    writer.startElement("span", this);
    String styleClass = getStyleClass();
    writer
        .writeAttribute("class", styleClass, "styleClass");

    UIComponent headerComponent = getFacet("header");
    if (headerComponent != null) {
      headerComponent.encodeAll(context);
    }

    writer.startElement("hr", null);
  }

  @Override
  public void encodeChildren(FacesContext context)
      throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    for (UIComponent kid : getChildren()) {
      kid.encodeAll(context);
      writer.startElement("br", null);
    }
  }

  @Override
  public void encodeEnd(FacesContext context)
      throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    writer.endElement("span");
  }
3
ответ дан 15 December 2019 в 01:11
поделиться

Едва ли ответ, больше предположения, но возможно Вы могли расширить одни из средств управления facelets?

С другой стороны, любое использование facelets непосредственно - который, кажется, точно, что Вы хотите действительно, хотя я не использовал его сам. Или Вы могли добавить средства управления UIOutput, где Вы хотите, чтобы HTML появился, и устанавливать значение каждого к HTML Вы хотите появиться - это точно, что f:verbatim делает под капотом, или таким образом, это кажется от рассмотрения исходного кода :-)

1
ответ дан 15 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: