问题描述
|
我正在制作一个自定义登录对话框,类似于在http://www.primefaces.org/showcase/ui/dialogLogin.jsf上找到的对话框,但是在构建时出现错误:
javax.el.PropertyNotFoundException:/WEB-INF/templates/BasicTemplate.xhtml @ 58,83 oncomplete = \“ handleLoginRequest(#{securityController.logIn})\”:类\'managedbeans.SecurityController \'没有该属性\'登录\'。
我认为错误在于我尝试触发日志记录过程的方式。有人可以看看我的语法是否正确吗?
<p:dialog id=\"dialog\" header=\"Login\" widgetvar=\"dlg\" modal=\"true\" width=\"400\" resizable=\"false\" draggable=\"false\" fixedCenter=\"true\">
<h:form>
<h:panelGrid columns=\"2\" cellpadding=\"5\">
<h:outputLabel for=\"username\" value=\"Em@il: *\" />
<p:inputText value=\"#{securityController.email}\"
id=\"email\" required=\"true\" label=\"email\" />
<h:outputLabel for=\"password\" value=\"Password: * \" />
<h:inputSecret value=\"#{securityController.password}\"
id=\"password\" required=\"true\" label=\"password\" />
<f:facet name=\"footer\">
<p:commandButton value=\"Login\" update=\"growl\"
oncomplete=\"handleLoginRequest(#{securityController.logIn})\"/>
</f:facet>
</h:panelGrid>
</h:form>
</p:dialog>
<script type=\"text/javascript\">
function handleLoginRequest(input) {
if(input == false) {
jQuery(\'#dialog\').parent().effect(\"shake\",{ times:3 },100);
} else {
dlg.hide();
jQuery(\'#loginLink\').fadeOut();
}
}
</script>
这是托管bean,它保存了被称为onComplete事件的方法:
@ManagedBean
@RequestScoped
public class SecurityController {
@EJB
private IAuthentificationEJB authentificationEJB;
private String email;
private String password;
private String notificationValue;
public void logIn() {
if(authentificationEJB.saveUserState(email,password)) {
notificationValue = \"dobro dosli\";
}
}
//getters and setters...
解决方法
您必须从
p:commandButton
的actionListener
属性而不是oncomplete
属性内调用登录方法。该示例中的javascript函数可以直接使用。仅用于显示效果。
通过以下方式更改您的p:commandButton
:
<p:commandButton value=\"Login\" update=\"growl\"
oncomplete=\"handleLoginRequest(xhr,status,args)\"
actionListener=\"#{securityController.logIn}\"
/>
并完全按照primefaces展示中的方式使用js函数:
<script type=\"text/javascript\">
function handleLoginRequest(xhr,args) {
if(args.validationFailed || !args.loggedIn) {
jQuery(\'#dialog\').parent().effect(\"shake\",{ times:3 },100);
} else {
dlg.hide();
jQuery(\'#loginLink\').fadeOut();
}
}
</script>
,如果要对javascript事件执行方法,请使用<a4j:jsfunction>
这里的例子。