Mr_*_*s_D 6 model-view-controller jsf jsp servlets java-ee
让我们举一个基本的例子.在servlet应用程序中,我将拥有这些类:
Register(User).会打电话给DAO.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框架 - 或明确声明不存在这样的技术翻译.
也可以看看:
JSF 2 中有两个级别的 MVC:
@ManagedBean,View = Facelets/xhtml,Controller =FacesServlet如果你只看jsf@ManagedBean如果你从整体上看你的应用程序,模型 = 实体 + 服务,控制器 = ,视图 = xhtml。JSF 应用程序中的典型包布局是相同的:
com.foo.domain.featurex.service<- 型号com.foo.domain.featurex.model<- 型号com.foo.presentation.featurex<- 控制器这里没有那么大的区别,只是您的控制器现在是FacesServlet(JSF 的核心),并且您的@ManagedBean/@Named控制器将驻留在类似的类com.foo.presentation.featurex.Controller/Handler或类似的东西中。
简单注册示例:
// we talk about the big picture here, not about how jsf is built
// but how your app is built
// model
package com.foo.domain.registration.entity;
@Entity
public class User {
// fields
}
package com.foo.domain.registration.service;
// also model
@Stateless
public class RegistrationService {
@PersistenceContext
EntityManager em;
public void register(User u) {
em.persist(u);
}
}
package com.foo.presentation
// controller
@Named
@ViewScoped
public class RegistrationController {
@Inject
RegistrationService rs;
User current = new User();
public void register() {
rs.register(u);
}
// get set for current user
}
// view
// quite a lot boilerplate omitted
// form omitted which displays all the necessary field of your current user
// via value="#{registrationContoller.current.name}"
<h:commandButton value="submit" type="submit" action="#{registrationController.register}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |