Мой элемент не становится отвечающим современным требованиям

У меня есть "panelGroup" с render, который зависит от переменной boolean, и кнопкой, которая меняет состояние этого booleano, но в момент того, чтобы выходить ему click на кнопку, panelgroup не становится отвечающим современным требованиям до тех пор, пока он не перезагрузит страницу несмотря на то, что ДА у меня есть update.

xhtml:

<h:form >
    <p:commandButton class="btn" value="mostrar foo"
        action="#{developerController.foo}" update="foo"/>

    <h:panelGroup id="foo" rendered="#{developerController.bar}">
        foo
    </h:panelGroup>
</h:form>

Мой bean:

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named(value = "developerController")
@SessionScoped
public class DeveloperController implements Serializable {

private boolean bar;


public DeveloperController() {

}

public void foo() {
    bar=!bar;
}

public boolean isBar() {
    return bar;
}

public void setBar(boolean bar) {
    this.bar = bar;
}
}

Что я должен делать для того, чтобы он стал отвечающим совремнным требованиям?

0
задан 24.01.2017, 23:12
0 ответов

Как индийский Lithorel, rendered=false он виновный в том, что не становится отвечающим современным требованиям. Выражение это, другие выборы кроме той, которую он предлагает:

Выбор 1:

update="@form"

handicap состоит в том, что становится отвечающим современным требованиям весь form.

Выбор 2:

<h:form>
    <p:commandButton class="btn" value="mostrar foo"
        action="#{developerController.foo}" update="miPanel"/>

    <p:outputPanel id="miPanel">
        <h:panelGroup id="foo" rendered="#{developerController.bar}">
            foo
        </h:panelGroup>
    </p:outputPanel>
</h:form>

Элемент miPanel красится всегда и следовательно ты можешь обновлять это.

Выбор CSS также хороший, это вопрос вкуса.

3
ответ дан 03.12.2019, 17:31
  • 1
    outputPanel был лучшим opció n так как внутри моего panelgroup tení двум формам и поместив это внутри другой формы он давал ошибку, превосходно. –  25.01.2017, 22:00

renderer способствует тому, чтобы твой panelGroup не пошел в html а следовательно update не служит, так как элемент id=foo не существует.

Решение состоит в том, чтобы использовать display:none / display:block в style и делать выбор с условным bean.

<h:form >
    <p:commandButton class="btn" value="mostrar foo"
        action="#{developerController.foo}" update="foo"/>

    <h:panelGroup id="foo" style="#{developerController.bar ? 'display:block;' : 'display:none'}">
        foo
    </h:panelGroup>
</h:form>
2
ответ дан 03.12.2019, 17:31
  • 1
    " renderer способствует тому, чтобы твой panelGroup не пошел в html". Ошибка. Это способствует тому, чтобы компонент не создал в UITreeView, поэтому не может быть re renderizado. В этом случае, что ты делаешь, что компонент esté в á rbol вида и, поэтому, renderice Ваш HTML, потом ты контролируешь ló gica видимого / скрытого. –  26.01.2017, 15:35

Когда хочет стать отвечающим совремнным требованиям признак rendered элемента, update нужно выполнять в элемент отца:

<h:form id="frmFoo">
    <p:commandButton class="btn" value="mostrar foo"
        action="#{developerController.foo}" update="frmFoo"/>

    <h:panelGroup id="foo" rendered="#{developerController.bar}">
        foo
    </h:panelGroup>
</h:form>

С rendered в false, элемент не существует, поэтому это не находит, сделав update.

1
ответ дан 03.12.2019, 17:31

Очень хорошие выборы уже упомянутая, я предполагаю, что то, что ты разрабатываешь, идет за пределами простого foo.

Также ты можешь использовать styleClass, чтобы реализовывать update и это распределять только в элементы, которые ты хочешь обновить, чтобы избегать использовать столько контейнеров и более длинных ссылок; когда твой код вырастет значительно, тебе сможет казаться практичность этой технической.

Обрати внимание в следующем примере, как одинокий мы обновляем элемент, не импортируя, что такое укрытое находилось.

<h:form >

    <p:commandButton class="btn" value="Calcular Neto" action="#{beanController.calcular}" 
      update="@(.neto)"/>

    <h:panelGroup id="contenedorPrincipal" >


         <h:panelGroup....

               <h:panelGroup......

                    <h:outputText value="Neto: "/>
                    <h:outputText styleClass="neto" value="#{bean.neto}" />

               </h:panelGroup>

          </h:panelGroup>

    </h:panelGroup>

</h:form>

Здесь ты можешь находить путеводитель с этой и другими техниками, которые сделают тебе более легкими обнаруживать твои компоненты:

https://youtu.be/hooHODgu6aM

Привет!

1
ответ дан 03.12.2019, 17:31