这是一个非常愚蠢的问题,可能有一个非常简单的答案。我一直在谷歌搜索过去周试图理解这一点,然而,并且已经空了。
我有一个简单的servlet,允许用户访问另一个用户发布的文章。 servlet使用请求url来确定要获取的文章,并遵循以下模式:
http://www.example.com/ 的Servlet / 文章#的
通过在url中使用此数字,它获取文章,将其放入相应的文章对象,这是一个请求范围的托管bean,并尝试将请求传递给JSF,article.xhtml,这是负责呈现文章页面。
尽管我付出了最大的努力,但我似乎无法将在我的servlet中创建的Article bean传递给JSF页面。我通过该文章的方法如下:
//import and package declaration
public class ArticleServlet extends HttpServlet {
//various methods
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Retrieve article #
Article article = //create/fetch article using #
request.setAttribute("article", article);
request.getRequestDispatcher("/dev/article.xhtml").forward(request, response);
}
}
Article类本身的设置类似于以下内容:
@ManagedBean
@RequestScoped
public class Article {
private String title;
//other instance variables
public Article()
{
title = null;
//init other variables to default values
}
public Article(Integer articleNum)
{
//Retrieve article and init using the number, including the title variable
}
//Getter and Setter methods
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
//More getters and setters
}
最后,我有自己的JSF页面,它是从网页设计师为我做的模型修改而来的。我尝试了两种方法从页面中访问bean:
<?xml version='1.0' encoding='UTF-8' ?>
<!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://xmlns.jcp.org/jsf/html">
<h:head>
//header stuff, stylesheet links, etc.
</h:head>
<h:body>
//template text, scripts, etc.
<h2>#{article.title}</h2>
</h:body>
我尝试的另一种方法是用#{article.title}
替换outputText标记。第一种方法,就像我发布的那样,只是在没有任何内容的情况下填充h2标签中的空格,第二种方法将字符#{article.title}
字面打印到页面。
我是否尝试将JSF用于不适用的东西?我没有正确地将bean传递到页面吗?我所知道的是,这应该是一项相当简单的任务,但无论我做了多少搜索,我都无法弄明白。