我目前的代码。
<h:form>
<h:panelGroup id="messagePanel" layout="block">
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
</h:panelGroup>
<h:panelGrid columns="2">
// some form input stuff here..
</h:panelGrid>
<h:commandButton class="register-btn" action="#{accountController.create}" value="#{bundle.Register}">
<f:ajax event="action" execute="@form" render="messagePanel"/>
</h:commandButton>
</h:form>
messagePanel是验证错误显示的位置。
create()方法
public String create() {
try {
getFacadeUser().create(currentUser);
FacesContext.getCurrentInstance().getExternalContext().redirect("/index.xhtml");
return null;
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
return null;
}
}
成功创建后可以调用javascript吗?目前我的创建表单是一个弹出模式,我想要的是在成功创建后隐藏模态而不是重定向到页面。
我正在使用JSF 2.1
答案 0 :(得分:0)
您可以在托管bean中为对话框创建组件绑定,并使用该绑定从函数中隐藏对话框。我认为代表组件绑定的对象类型是特定于框架的(尽管它们都可能扩展了UIComponent),因此您需要指定用于完整解决方案的JSF实现。我在ADF中实现了这个用例。
这是ADF的一个例子:
<af:popup id="sample" binding="#{viewScope.myBean.myPopup}">
并在托管bean中:
RichPopup myPopup;
...
public void onSave() {
//save user
myPopup.hide();
}
答案 1 :(得分:0)
使用标准JSF(读取:没有组件库或实用程序库,如PrimeFaces或OmniFaces,它们有办法使这更容易),最好的办法是有条件地渲染<script>
元素。
<h:panelGroup id="script">
<h:outputScript rendered="#{not empty accountController.currentUser.id}">
alert('User successfully created!');
</h:outputScript>
</h:panelGroup>
在<f:ajax ... render="script">
中引用它。