我在托管bean中有条件。我想在条件为真时显示警报。我怎么做的?类似的东西:
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>
答案 0 :(得分: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警报是soo 90's并且在动作方法中执行输入验证是糟糕的设计。