在 JSF 页面中从数据库输出数据
Output data from database in JSF page
我正在使用 JSF 制作一个项目,我知道如何从我的视图中获取数据。我也知道如何使用 JDBC 连接器获取数据。以及如何从某些对象将数据放入视图中,但我的问题是:
如何将数据直接从我的数据库中放入 JSF 中,例如带有标签 <h:outputText value="#{}"/>
的人员列表?
我找到了一些实例化对象的示例,但我没有找到来自数据库的数据的真实示例。
JSF 只是一个用于在 Java 中开发 Web 应用程序的 MVC 框架。 JSF 根本 不与任何数据源关联。 JSF 将使用的唯一数据是从以下位置检索的:
- 已作为属性存储在适当对象中的数据:
HttpServletRequest
、HttpSession
或 ServletContext
。
- 托管 bean 中字段形式的 request/view/session/application 上下文,如果使用 CDI,则被 类 识别为
@ManagedBean
s 或 @Named
。这些字段的数据将作为属性存储在上一节中提到的对象中,具体取决于托管 bean 的范围。
知道了这一点,那么您唯一应该担心的就是填充托管 bean 中的字段。您可以用来自数据库、Web 服务或您想到的任何数据源的传入数据填充它们。
例如,如果您want/need填充数据以预处理请求,您可以执行以下操作:
@ManagedBean
@ViewScoped
public class SomeBean {
List<Entity> entityList;
@PostConstruct
public void init() {
SomeService someService = new SomeService();
entityList = someService.findEntityList();
}
//getters and setters for the list...
}
//as you can see, this class is just pure Java
//you may use other frameworks if you want/need
public class SomeService {
public List<Entity> findEntityList() {
String sql = "SELECT field1, field2... FROM table";
List<Entity> entityList = new ArrayList<>();
try (Connection con = ...; //retrieve your connection somehow
PreparedStatement pstmt = con.prepareStatement(sql)) {
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Entity entity = new Entity();
entity.setField1(rs.getString("field1"));
entity.setField2(rs.getString("field2"));
//...
entityList.add(entity);
}
} catch (Exception e) {
//handle exception ...
e.printStackTrace();
}
return entityList;
}
}
我正在使用 JSF 制作一个项目,我知道如何从我的视图中获取数据。我也知道如何使用 JDBC 连接器获取数据。以及如何从某些对象将数据放入视图中,但我的问题是:
如何将数据直接从我的数据库中放入 JSF 中,例如带有标签 <h:outputText value="#{}"/>
的人员列表?
我找到了一些实例化对象的示例,但我没有找到来自数据库的数据的真实示例。
JSF 只是一个用于在 Java 中开发 Web 应用程序的 MVC 框架。 JSF 根本 不与任何数据源关联。 JSF 将使用的唯一数据是从以下位置检索的:
- 已作为属性存储在适当对象中的数据:
HttpServletRequest
、HttpSession
或ServletContext
。 - 托管 bean 中字段形式的 request/view/session/application 上下文,如果使用 CDI,则被 类 识别为
@ManagedBean
s 或@Named
。这些字段的数据将作为属性存储在上一节中提到的对象中,具体取决于托管 bean 的范围。
知道了这一点,那么您唯一应该担心的就是填充托管 bean 中的字段。您可以用来自数据库、Web 服务或您想到的任何数据源的传入数据填充它们。
例如,如果您want/need填充数据以预处理请求,您可以执行以下操作:
@ManagedBean
@ViewScoped
public class SomeBean {
List<Entity> entityList;
@PostConstruct
public void init() {
SomeService someService = new SomeService();
entityList = someService.findEntityList();
}
//getters and setters for the list...
}
//as you can see, this class is just pure Java
//you may use other frameworks if you want/need
public class SomeService {
public List<Entity> findEntityList() {
String sql = "SELECT field1, field2... FROM table";
List<Entity> entityList = new ArrayList<>();
try (Connection con = ...; //retrieve your connection somehow
PreparedStatement pstmt = con.prepareStatement(sql)) {
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Entity entity = new Entity();
entity.setField1(rs.getString("field1"));
entity.setField2(rs.getString("field2"));
//...
entityList.add(entity);
}
} catch (Exception e) {
//handle exception ...
e.printStackTrace();
}
return entityList;
}
}