0

我在托管 bean 中有 if 条件。我想在条件为真时显示警报。我该怎么做?就像是:

    public void catInsert()
        {
            if(abr.searchCategoryByCategoryName(CategoryName)!=null){
    //                msg = "<div style = 'color:red'>CategoryName already exist!</div>";
    //                System.out.println(msg);
//  i want alert here

            }else
            {
            abr.addCategory(CategoryName);
            CategoryName="";
            }
         }

而xhtml页面是;

<table class="nostyle">
                <tr>
                    <td align="right">
                    <h:outputText value="Category Name:"></h:outputText>
                    </td>
                    <td>
                        <h:inputText id="txtcatname" value="#{categoryBean.categoryName}" required="true" requiredMessage="Enter category Name" >
                        </h:inputText>
                    </td>
                    <td ><h:message for="txtcatname" style="color: #df0000"></h:message></td>>            
                </tr>
                <tr>
                    <td></td>
                    <td align="left">
                        <h:commandButton id="submit" type="Submit" value="submit" action="#{categoryBean.catInsert()}" >
                        </h:commandButton>
                    </td>

                </tr>
            </table>
4

1 回答 1

2

你犯了一个概念上的错误。HTML/JS 代码不属于控制器,而是属于视图。控制器必须以某种方式通知视图它必须生成所需的一堆 HTML/JS 代码。

你可以通过像这样设置一个布尔属性来做到这一点

private boolean showCategoryNameAlert;

public void catInsert() {
    if (abr.searchCategoryByCategoryName(categoryName) != null) {
        showCategoryNameAlert = true;
    } else {
        abr.addCategory(categoryName);
    }
}

public boolean isShowCategoryNameAlert() {
    return showCategoryNameAlert;
}

<h:outputScript rendered="#{categoryBean.showCategoryNameAlert}">
    alert("CategoryName already exist!");
</h:outputScript>

顺便说一句,您为什么不在输入字段上FacesContext#addMessage()使用<h:messages>甚至是普通的 JSF ?Validator显示 JavaScript 警报是 90 年代的事情,并且在操作方法中执行输入验证是糟糕的设计。

于 2012-06-16T13:32:19.907 回答