相关疑难解决方法(0)

JSF支持bean结构(最佳实践)

我希望在这篇文章中,我可以得到人们对JSF页面和支持bean之间接口的最佳实践的看法.

我永远无法解决的一件事是我的支持豆的结构.此外,我从未找到关于这个主题的好文章.

什么属性属于哪个支持bean?何时适合向给定bean添加更多属性,而不是创建新bean并将属性添加到其中?对于简单的应用程序,考虑到将一个bean注入另一个bean所涉及的复杂性,为整个页面只有一个支持bean是否有意义?支持bean是否应该包含任何实际的业务逻辑,还是应该严格包含数据?

随意回答这些问题以及可能出现的任何其他问题.


至于减少JSF页面和支持bean之间的耦合,我从不允许JSF页面访问任何支持bean属性的属性.例如,我从不允许以下内容:

<h:outputText value="#{myBean.anObject.anObjectProperty}" />
Run Code Online (Sandbox Code Playgroud)

我总是需要这样的东西:

<h:outputText value="#{myBean.theObjectProperty}" />
Run Code Online (Sandbox Code Playgroud)

支持bean值为:

public String getTheObjectProperty()
{
    return anObject.getAnObjectProperty();
}
Run Code Online (Sandbox Code Playgroud)

当我循环遍历集合时,我使用包装类来避免向下钻取到数据表中的对象.

一般来说,这种方法对我来说是"正确的".它避免了视图和数据之间的任何耦合.如果我错了,请纠正我.

java jsf

116
推荐指数
3
解决办法
7万
查看次数

96
推荐指数
2
解决办法
4万
查看次数

在不同种类的JSF管理豆之间做出区分

我最近阅读了来自Neil Griffin的这篇文章,在不同种类的JSF Managed-Beans之间做出区分,这让我想到了我自己的应用程序中不同bean之间的区别.要快速总结一下要点:

  • Model Managed-Bean:这种类型的托管bean参与MVC设计模式的"模型"关注.当你看到"模型"这个词时 - 想想数据.JSF模型bean应该是遵循JavaBean设计模式的POJO,其中getter/setter封装属性.

  • 支持托管Bean:这种类型的托管bean参与MVC设计模式的"视图"关注.backing-bean的目的是支持UI逻辑,并且与Facef组合中的JSF视图或JSF表单具有1 :: 1的关系.虽然它通常具有带有关联getter/setter的JavaBean样式属性,但它们是View的属性 - 而不是底层应用程序数据模型的属性.JSF支持bean也可能有JSF actionListener和valueChangeListener方法.

  • Controller Managed-Bean:这种类型的托管bean参与MVC设计模式的"Controller"关注.控制器bean的目的是执行某种业务逻辑并将导航结果返回给JSF导航处理程序.JSF控制器bean通常具有JSF操作方法(而不是actionListener方法).

  • 支持Managed-Bean:这种类型的bean"支持"MVC设计模式的"View"关注中的一个或多个视图.典型的用例是向JSF h:selectOneMenu下拉列表提供ArrayList,这些列表出现在多个JSF视图中.如果下拉列表中的数据特定于用户,则bean将保留在会话范围内.

  • Utility Managed-Bean:这种类型的bean为一个或多个JSF视图提供某种类型的"实用程序"功能.一个很好的例子可能是FileUpload bean,它可以在多个Web应用程序中重用.

这对我来说很有意义,在过去的几个小时里,我一直在重构我的代码,并针对用户登录提出以下内容:

AuthenticationController是Controller Managed-Bean的一个例子.它是请求范围的,具有两个用于设置用户名和密码的getter和setter,以及两种导航方法,authenticatelogout在成功登录时将用户导航到其私有区域,或者在注销时返回主页面.

UserBean是一个支持管理Bean的示例.它是会话范围的,并且具有User类的实例(当您未经过身份验证时将使用getter和setter,它将为null),仅此而已.

AuthenticationController有这个用户作为托管属性(@ManagedProperty(value = "#{userController.user} private User user;).验证成功后,AuthenticationController将使用用于登录的相应用户名将托管属性设置为实际用户实例.

任何新的bean都可以将用户作为托管属性获取并提取他们需要的数据,例如组成员资格,如果User该类具有包含组名的列表.

这种方式是关于分离问题的正确方法吗?

java jsf java-ee backing-beans

45
推荐指数
1
解决办法
1万
查看次数

与传统的3层模式相比,MVC模式的主要优点是什么?

我正在考虑在我的新项目中使用MVC模式,我可以清楚地看到能够将数据层(模型)更接近表示层(视图)的主要优势,这将允许稍微增加在申请速度.但除了性能观点之外,MVC还是在视图 - 逻辑 - 数据分层类型模式上还有其他优势吗?

编辑: 对于那些感兴趣的人我刚刚上传了我创建的示例PHP代码来测试MVC的使用.我故意省略所有安全检查以使代码更容易阅读.请不要过多批评它,因为我知道它可以更加精致和先进,但不过 - 它有效!我将欢迎提出问题和建议:链接如下:http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.zip

model-view-controller design-patterns 3-tier n-tier-architecture n-layer

32
推荐指数
2
解决办法
6万
查看次数

Servlet/JSP MVC模式如何转换为JSF/Facelets(特别是服务和控制器部分)?

让我们举一个基本的例子.在servlet应用程序中,我将拥有这些类:

  • app.domain.User:域或模型POJO,将包含字段和getter/setter
  • app.service.UserService:将包含对User实例进行操作的方法,例如Register(User).会打电话给DAO.
  • app.dao.UserDao:实际上会被服务调用,比如在数据库中插入一个用户.
  • app.servlets.RegisterController:一个servlet拦截对www.app/registration的请求并调用app.service.UserService中的方法.然后它会重定向到WEB-INF\JSPs\registration.jsp哪个会处理视图.

所有这些对我来说都很有意义,并且明确区分了这些问题.

我已经尝试过围绕JSF/Facelets的思维方式.我已经在SO和其他地方经历了许多优秀的资源,但是没有任何地方可以解决这个简单的问题 - 即dao/service/controller/view模式如何转换为JSF.

继续我的例子 - 我已经在eclipse中设置了一个JSF项目,已经将我的数据库模式转换为"entities"现在我想知道 - 我应该创建什么样的类来处理用户注册?我知道我必须为视图创建xhtml页面,但控制器在哪里?

请不要指教我- 我知道很多,其中@BalusC一个 - 我的问题不是让这个工作,而是要了解模式.我已经看到"session"包中包含"托管bean","抽象外观"模式等等,但没有任何东西可以像旧的servlet模式一样清晰.

所以 - 在DB创建的"实体"中,有一个看起来像模型的User.java类.该视图将是一个xhtml.控制器?

注意:这并不是要求这么多重复这些技术之间的差异 - 我要求将非常清晰直观的控制器/ dao /服务模式清晰地转换为JSF框架 - 或明确声明不存在这样的技术翻译.

也可以看看:

model-view-controller jsf jsp servlets java-ee

6
推荐指数
1
解决办法
1033
查看次数

JSF 中 MVC 的矛盾解释

我开始学习 JSF,但首先我想了解它作为 MVC 框架的总体情况。

有几个得到很多赞同的答案解释了 JSF 中的 MVC 层,但它们通常是相互矛盾的。

BalusC的回答: JSF MVC框架中的MVC是什么组件?

在大的架构图中,您自己的 JSF 代码是V

M - 业务领域/服务层(例如 EJB/JPA/DAO)
V - 您的 JSF 代码
C - FacesServlet

在开发者图中,架构V依次可分如下:

M - 实体
V - Facelets/JSP 页面
C - 托管 bean

Jigar Joshi 在同一线程中的回答:

模型将是你的ManagedBean

视图将是jspXHTML(好吧,你可以在这里容纳各种视图)

控制器将是FacesServlet

这里,对这个问题的另一种看法:

在 JSF 中,您不实现控制器。因此,支持 bean 或任何其他类型的托管 bean 都不是控制器

还有一个,这次不是来自 Stackoverflow:

在 JSF 中,主控制器始终是 FacesServlet。子控制器被合并到各种控制元素标签实现中。您几乎从未在 JSF 中编写控制器代码,因为它都是预先提供的。因此,您只需提供视图模板 (xhtml) 和模型(支持 …

java model-view-controller jsf

5
推荐指数
1
解决办法
1044
查看次数

从请求范围的bean访问会话范围的bean

我正在尝试使用在IceFaces页面上找到的模式.(我没有使用IceFaces,使用PrimeFaces)

在这种情况下,我有两个豆:

UserControllerUsermodel

在我的UserModel上,我有一个UserVO实例(由另一个程序员创建).在我的UserController上我有这个:

@ManagedBean
@RequestScoped
public class UserController implements Serializable
{

    private static final long serialVersionUID = 1L;
    private UserBO bo;
    private UserModel model;

    public UserController()
    {
        bo = new UserBO();
        model = new UserModel();
    }

    public void Login() throws IOException
    {
        model.setUserVo(bo.executeLogin(model.getUserVo()));
        ExternalContext externalContent = FacesContext.getCurrentInstance().getExternalContext();
        if (!model.getUserVo().isError())
        {
            model.setLoggedIn(true);
            externalContent.getSessionMap().put("userSession", model);
            externalContent.redirect(externalContent.getRequestContextPath() + "/views/request/search.html");
        } else
        {
            model.setLoggedIn(false);
            FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, model.getUserVo().getMessage(), model.getUserVo().getLogin());
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

jsf session-scope jsf-2

4
推荐指数
2
解决办法
1万
查看次数

JSF c:设置评估

<c:set var="product" value="#{productDAO.findByCode('code')}"  />
#{product.name}
#{product.name}
Run Code Online (Sandbox Code Playgroud)

我想从DB中检索一个对象并将其存储到变量中一次.但是,我发现每次访问产品时都会调用DB.在上面的示例中,有两个对DB的调用.

jsf jstl jsf-2

2
推荐指数
1
解决办法
7675
查看次数

JSF是否支持MVVM设计模式?

我现在在我的一个应用程序中使用ZK Framework.ZK Framework支持MVC以及MVVM设计模式.现在我想用一个新项目来使用JSF.JSF是支持设计模式还是仅支持MVC?

jsf design-patterns jsf-2

2
推荐指数
1
解决办法
1835
查看次数