2017-07-12 9 views
1

Java Server Facesでホテルの部屋予約ページを行っています。私はホテルの検索を含む基本テンプレートを持っており、結果を示すインデックステンプレートがあります。私はフロントページのすべてのホテルをカバーのように読み込んでいます。彼らはDIVのホテルをオーバーフローしないようにと、私は唯一の9ホテルを示しています。¿どのようにレコードのページ番号を作成できますか? (JSF)

enter image description here

[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つの結果は真実は私がデータテーブルにそれを配置する方法を知らないということです...

それを行うには簡単かつ実用的な方法はありますか?

+1

サードパーティライブラリを使用できるかどうかわかりませんが、[こちら](https://www.primefaces.org/showcase/ui/data/dataGrid.xhtml)はあなたが望むものです? –

+1

それ以外は、いくつかのヒント: '@ Named'と' @ ManagedBean'を一緒に使用しないでください。そして、 'ResultElement'クラスに埋め込まれたHTMLコードはかなり混乱しているように見えますが、私はFaceletファイルでHTMLの処理をしたいと思います。 –

+0

「@名前付き」は、2つのうちより将来的なものです。そして、私はJSFの 'コントローラ'にSQLがないことを確認するだろう... http://stackoverflow.com/questions/30639785/jsf-controller-service-and-dao – Kukeltje

答えて

2

ネイティブJSFには、ページネーション用のコンポーネントがありません。
Primefacesのようなコンポーネントライブラリには、DataGridのような改ページコンポーネントがあります。

+1

私はサポートがないとは言いません。 JSF自体はHTMLコードのレンダリングに重点を置いており、ページネーションはそのスコープから単純に外れる機能です。しかし、自分で簡単に実装できるかもしれません。 –

関連する問題