在Servlet中实例化JSF Managed Bean并将请求(使用Bean)传递给JSF

时间:2015-07-11 04:14:42

标签: jsf servlets jsf-2 managed-bean

这是一个非常愚蠢的问题,可能有一个非常简单的答案。我一直在谷歌搜索过去试图理解这一点,然而,并且已经空了。

我有一个简单的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传递到页面吗?我所知道的是,这应该是一项相当简单的任务,但无论我做了多少搜索,我都无法弄明白。

0 个答案:

没有答案