gpt4 book ai didi

java - xhtml 文件未通过注释与 bean 绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 11:12:24 24 4
gpt4 key购买 nike

我使用注释在 JSF 2.0 中制作了一个简单的登录页面。我在 JBOSS 6 中使用 Eclipse。Login.xhtml文件代码为

    <?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">


<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Sign-In Page</title>
</h:head>
<h:body>
<h3>Sign In</h3>
<h:form>
<!-- Email id: <h:inputText value="#{loginBean.emailid}" id="emailid" size="20"></h:inputText>
<br />
Password: <h:inputSecret value="#{loginBean.password}" id="password"></h:inputSecret>-->

<h:commandButton value="signin" action="#{loginBean.dologin}" id="signin"></h:commandButton>
</h:form>
</h:body>
</html>

LoginBean.java 代码是:

    package com;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.swing.JOptionPane;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "loginBean" , eager=true)
@SessionScoped

public class LoginBean implements Serializable {

private static final long serialVersionUID = 7765876811740798583L;

private String emailid = "Madiha";
private String password = "madiha";


public void dologin()
{
if (emailid.equals("Madiha") && password.equals("madiha")) {
JOptionPane.showInputDialog("Eggs are not supposed to be green.");
// System.out.print("You are logged IN");
}

FacesMessage msg = new FacesMessage("Login error!", "ERROR MSG");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, msg);

}

public String getEmailid() {
return emailid;
}

public void setEmailid(String emailid) {
this.emailid = emailid;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

当我运行这个 login.xhtml 时,它们只显示标签,没有按钮或文本字段。Bean 类似乎没有正确绑定(bind)。

最佳答案

<强>1。错误的 JSF 标签。 标签名称 1) 区分大小写,2) 您使用的标签属于另一个带有命名空间前缀 h: 的标签库,如在 xmlns 中设置的> html 元素的属性。您应该将 f:inputtext 更正为 h:inputText,将 f:inputSecret 更正为 h:inputSecret f:commandbuttonh:commandButton

<强>2。错误的 bean 属性定义。正如 @SJuan76 指出的那样,要使用属性 #{bean.property},您应该定义公共(public)方法 public String getProperty(){} (区分大小写!)在您的托管 bean 中。

为了避免将来出现此类问题,您最好使用一些 IDE(例如 Netbeans IDE 或 Intellij IDEA)。 IDE 具有出色的自动完成和验证功能,尤其是对于 JavaEE 标准库。

<强>3。您正在混合使用 CDI 和 JSF 依赖注入(inject)机制。使用 CDI 的 @javax.inject.Named@javax.enterprise.context.SessionScoped 或 JSF 的 @javax.faces.bean.ManagedBean@javax.faces.bean.SessionScoped

<强>4。错误的 h:CommandButton action 属性。 JSF 规范(JSP 标记文档/h:/Tag commandButton)对 action 属性说:

The expression must evaluate to a public method that takes no parameters, and returns an Object (the toString() of which is called to derive the logical outcome) which is passed to the NavigationHandler for this application

dologin() 不能为空。它应该返回例如字符串结果,其导航规则存在于 WEB-INF/faces-config.xml 或应导航到的 View 名称中。例如。如果 dologin() 返回 "success" 用户将被导航到 success.xhtml;如果 dologin() 返回 "failure" 那么用户将被导航到 failure.xhtml。

JSF 文档可在 jcp.org 获得:JSF 2.2 spec .

如果你想显示对话框而不是导航到不同的 View ,你应该在你的 Login.xhtml 中使用 f:ajax 标签和 h:commandButton 来部分渲染 View .您不能在此处使用 Swing 的 JOptionPane,因为客户端 Swing 与服务器端 JSF 无关。

PS 我建议下载 JSF 规范以供引用,例如,“JavaServer Faces 2.0:完整引用”(Ed Burns,Chris Schalk)。当然,还可以使用像 NetBeans 或 Intellij IDEA 这样的 IDE。它将提升您使用 JSF 的体验。

我的 Login.xhtml 有效:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">


<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Sign-In Page</title>
</head>
<h:body>
<h3>Sign In</h3>
<h:messages/>
#{loginBean.emailid}
<h:form>
Email id: <h:inputText value="#{loginBean.emailid}" id="emailid" size="20"/>
<br/>
Password: <h:inputSecret value="#{loginBean.password}" id="password"/>
<h:commandButton value="signin" action="#{loginBean.dologin}" id="signin"/>
</h:form>
</h:body>
</html>

关于java - xhtml 文件未通过注释与 bean 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26881828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com