Java Server Facesでホテルの部屋予約ページを行っています。私はホテルの検索を含む基本テンプレートを持っており、結果を示すインデックステンプレートがあります。私はフロントページのすべてのホテルをカバーのように読み込んでいます。彼らはDIVのホテルをオーバーフローしないようにと、私は唯一の9ホテルを示しています。¿どのようにレコードのページ番号を作成できますか? (JSF)
[OK]を、私は合計でデータベースに登録さわずか10のホテルを持っている....私は改ページを作りたいです私のページでは、1ページに9軒しかないホテルを表示しています。これを持っていると、データベースに10のホテルがあるので、次のページでは1つのホテルしか見ることができません。
これは私のインデックスページです:
<?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:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewAction action="#{buscador.cargarPortada()}"/>
</f:metadata>
<body>
<ui:composition template="./templates/base.xhtml">
<ui:define name="content">
<h:form id="form2">
<h:dataTable value="#{buscador.display}" var="res">
<h:column>
<h:outputLabel value="#{res.a}" escape="false"/>
</h:column>
<h:column>
<h:outputLabel value="#{res.b}" escape="false"/>
</h:column>
<h:column>
<h:outputLabel value="#{res.c}" escape="false"/>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</body>
私は結果を表示するのdataTableを使用しています。このクラスでは
package Clases;
public class ResultElement {
private String nombre, imagen, localidad;
private String display;
public ResultElement(String nombre, String imagen, String localidad){
this.nombre=nombre;
this.imagen=imagen;
this.localidad=localidad;
display = "<div id='HotP'><b><p style=\"text-align:center;font-
style:italic;color:red\">" + nombre + "</p></b>"
+"<img src=\"resources/images/" + imagen +
"\"style=\"width:160px;height:70px;border:1px solid gray;\"/><br>"
+ "<span style=\"color: darkblue;text-align: center;\">"+
localidad +"</span></div>";
}
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @return the imagen
*/
public String getImagen() {
return imagen;
}
/**
* @param imagen the imagen to set
*/
public void setImagen(String imagen) {
this.imagen = imagen;
}
/**
* @return the localidad
*/
public String getLocalidad() {
return localidad;
}
/**
* @param localidad the localidad to set
*/
public void setLocalidad(String localidad) {
this.localidad = localidad;
}
/**
* @return the display
*/
public String getDisplay() {
return display;
}
/**
* @param display the display to set
*/
public void setDisplay(String display) {
this.display = display;
}
}
:私はテーブル内の各ボックスを構築するのdataTableの行を処理するクラス、およびこのクラスでは、各ホテル
の表示ボックスを構築する別のクラス:私は2つのクラスを持っています私はテーブルの行を管理します。私は私のArrayListと私のページのページネーションを制御すると考え
package Beans;
import Clases.DisplayResult;
import Clases.ResultElement;
import javax.inject.Named;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.sql.ResultSet;
import Database.GestorDB;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author SEMINARIO
*/
@Named(value = "portada")
@ManagedBean
@ViewScoped
public class Buscador {
private String fechaE, fechaS, localidad;
private int personas;
private static ArrayList<DisplayResult> displayList;
private ArrayList<String> aux = new ArrayList<>();
public Buscador() {
displayList = new ArrayList<>();
}
public String getFechaE() {
return fechaE;
}
public void setFechaE(String fechaE) {
this.fechaE = fechaE;
}
public String getFechaS() {
return fechaS;
}
public void setFechaS(String fechaS) {
this.fechaS = fechaS;
}
public String getLocalidad() {
return localidad;
}
public void setLocalidad(String localidad) {
this.localidad = localidad;
}
public int getPersonas() {
return personas;
}
public void setPersonas(int personas) {
this.personas = personas;
}
public ArrayList<DisplayResult> getDisplay() {
return displayList;
}
public void setDisplay(ArrayList<DisplayResult> listaResultado) {
Buscador.displayList = listaResultado;
}
public void agregarResultado(DisplayResult resultado){
Buscador.displayList.add(resultado);
}
public void limpiarResultados(){
Buscador.displayList.clear();
aux.clear();
}
public void calibrar(){
do{
if(aux.size()%3 != 0)
aux.add("");
}while(aux.size()%3 != 0);
}
public void cargarPortada(){
try{
ResultSet rs = GestorDB.getConsulta("SELECT HOTELES.NOMBRE AS A, HOTELES.IMGHOTEL, LOCALIDADES.NOMBRE AS B FROM HOTELES INNER JOIN LOCALIDADES"
+ " ON LOCALIDADES.IDLOCALIDADES = HOTELES.LOCALIDADES_IDLOCALIDADES FETCH FIRST 9 ROWS ONLY");
while(rs.next()){
ResultElement res = new ResultElement(rs.getString("A"), rs.getString("IMGHOTEL"),rs.getString("B"));
aux.add(res.getDisplay());
}
calibrar();
for(int i = 0; i < aux.size(); i+=3){
DisplayResult obj = new DisplayResult(aux.get(i),aux.get(i+1),aux.get(i+2));
displayList.add(obj);
}
} catch (SQLException ex) {
Logger.getLogger(Buscador.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
しかし:私はページのカバーをロードし、検索を実行する場所
package Clases;
public class DisplayResult {
private String A, B, C;
public DisplayResult(String a, String b, String c){
A = a;
B = b;
C = c;
}
/**
* @return the A
*/
public String getA() {
return A;
}
/**
* @param A the A to set
*/
public void setA(String A) {
this.A = A;
}
/**
* @return the B
*/
public String getB() {
return B;
}
/**
* @param B the B to set
*/
public void setB(String B) {
this.B = B;
}
/**
* @return the C
*/
public String getC() {
return C;
}
/**
* @param C the C to set
*/
public void setC(String C) {
this.C = C;
}
}
このクラスである:私は、行ごとの3つの結果は真実は私がデータテーブルにそれを配置する方法を知らないということです...
それを行うには簡単かつ実用的な方法はありますか?
サードパーティライブラリを使用できるかどうかわかりませんが、[こちら](https://www.primefaces.org/showcase/ui/data/dataGrid.xhtml)はあなたが望むものです? –
それ以外は、いくつかのヒント: '@ Named'と' @ ManagedBean'を一緒に使用しないでください。そして、 'ResultElement'クラスに埋め込まれたHTMLコードはかなり混乱しているように見えますが、私はFaceletファイルでHTMLの処理をしたいと思います。 –
「@名前付き」は、2つのうちより将来的なものです。そして、私はJSFの 'コントローラ'にSQLがないことを確認するだろう... http://stackoverflow.com/questions/30639785/jsf-controller-service-and-dao – Kukeltje