Отображение диалогового окна, если в форме JSF не удовлетворены некоторые критерии - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь реализовать кнопку JSF с AJAX, которая формируется с AJAX, если некоторые критерии не выполнены. Я попробовал этот пример:

<h:form id="paymentform" enctype="multipart/form-data" x:data-form-output="form-output-global" x:data-form-type="contact" class="rd-mailform text-left">

<h:commandButton id="buy" class="btn btn-primary" type="submit" value="Put" action="#{dashboard.calculateProcessing}"  >
    <f:ajax render="@form" execute="@form" x:data-toggle="modal" x:data-target="#demoModal"/>  // if #{dashboard.amount} <= 0 call modal dialog 
</h:commandButton>

<div class="modal fade" id="demoModal" role="dialog">
.....
</div>

</h:form>



@Named
@SessionScoped
public class Dashboard implements Serializable {

    private static final long serialVersionUID = -2363083605115312742L;

    private double amount;

    public double getAmount() {
        return amount;
    }

    public void setAmount(double amount) {
        this.amount = amount;
    }
}

Если я отредактирую кнопку следующим образом:

<h:commandButton id="buy" class="btn btn-primary" type="submit" value="Put" action="#{dashboard.calculateProcessing}" x:data-toggle="modal" x:data-target="#demoModal" >

Откроется диалоговое окно и форма будет отправлена.

Но я могу не можете найти решение, как не отправлять форму, если некоторые критерии из Боба не выполнены. Можете ли вы подсказать мне, как найти решение?

1 Ответ

2 голосов
/ 17 января 2020

Вы хотите выполнить f:ajax на основе критериев в вашем бине. По сути, f:ajax должен отображаться, когда критерии верны, а в противном случае - нет. Каждый компонент JSF имеет значение rendered.

Ваш код должен выглядеть следующим образом:

<h:commandButton id="buy" class="btn btn-primary" type="submit" value="Put" action="#{dashboard.calculateProcessing}"  >
    <f:ajax render="@form" execute="@form" x:data-toggle="modal" x:data-target="#demoModal" rendered="#{dashboard.amount <= 0}"/>
</h:commandButton>

Это также можно сделать с несколькими f:ajax, например:

<h:commandButton>
    <f:ajax render="@form" rendered="#{bean.condition}" />
    <f:ajax execute="@form" rendered="#{bean.int < 0}" />
    <f:ajax action="#{bean.action}" rendered="#{bean.property == null}" />
</h:commandButton>

Обычно, если атрибут rendered имеет значение false, это не приведет к получению HTML клиентом. Подробнее о визуализации

Вы также можете использовать jstl теги , чтобы определить, будет ли компонент визуализирован. Используйте вот так:

<h:commandButton>
    <c:if test="#{bean.condition}>
        <!-- f:ajax here-->
    </c:if>

    <c:choose>
        <c:when test="#{bean.condition}">
            <!-- f:ajax here-->
        </c:when>

        <c:otherwise>
            <!-- f:ajax here-->
        </c:otherwise>
    </c:choose>
</h:commandButton>

Для вызова динамических c действий, например, в commandButton см. this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...