Propojení javascriptu a servletu.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/Html.java Fri May 29 00:13:11 2009 +0200
1.3 @@ -0,0 +1,14 @@
1.4 +package cz.frantovo.sql.vyuka;
1.5 +
1.6 +/**
1.7 + *
1.8 + * @author fiki
1.9 + */
1.10 +public class Html {
1.11 +
1.12 + /** Escapuje HTML značky v textu. */
1.13 + public static String escapuj(String text) {
1.14 + /** TODO: dopsat! */
1.15 + return text;
1.16 + }
1.17 +}
2.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java Thu May 28 23:12:19 2009 +0200
2.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java Fri May 29 00:13:11 2009 +0200
2.3 @@ -1,5 +1,9 @@
2.4 package cz.frantovo.sql.vyuka.ajax;
2.5
2.6 +import cz.frantovo.sql.vyuka.dto.Hlaska;
2.7 +import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
2.8 +import cz.frantovo.sql.vyuka.dto.VysledekSQL;
2.9 +
2.10 /**
2.11 * Pomocník servletu. Vrací HTML části stránek.
2.12 * @author fiki
2.13 @@ -10,14 +14,27 @@
2.14 * @return Historie SQL příkazů daného uživatele.
2.15 */
2.16 public String getHistorie(String idSezeni) {
2.17 - return "<p>historie (id=" + idSezeni + ")</p>";
2.18 + VysledekSQL v = new VysledekSQL();
2.19 + v.getHlasky().add(new Hlaska("Bude vypsána vaše historie", Typ.OK));
2.20 + v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
2.21 + v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
2.22 + v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
2.23 + v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
2.24 + return v.getHtml();
2.25 }
2.26
2.27 /**
2.28 * Vykoná zadaný SQL příkaz v databázi.
2.29 * @return Výsledek dotazu – tabulka, hláška nebo chyba.
2.30 */
2.31 - public String geSQLVysledek(String sql) {
2.32 - return "<p>SQL dotaz (čeština): " + sql + "</p>";
2.33 + public String geSQLVysledek(String sql, String idSezeni) {
2.34 + VysledekSQL v = new VysledekSQL();
2.35 + v.getHlasky().add(new Hlaska("Bude vykonán SQL dotaz.", Typ.OK));
2.36 + v.getHlasky().add(new Hlaska("idSezení: " + idSezeni, Typ.OK));
2.37 + v.getHlasky().add(new Hlaska("SQL: " + sql, Typ.OK));
2.38 + v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani));
2.39 + v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba));
2.40 + v.getHlasky().add(new Hlaska("Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.", Typ.Tip));
2.41 + return v.getHtml();
2.42 }
2.43 }
3.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java Thu May 28 23:12:19 2009 +0200
3.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java Fri May 29 00:13:11 2009 +0200
3.3 @@ -35,13 +35,13 @@
3.4 * @throws IOException if an I/O error occurs
3.5 */
3.6 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3.7 -
3.8 +
3.9 /** Používáme pouze UTF-8 */
3.10 response.setContentType("text/html;charset=UTF-8");
3.11 request.setCharacterEncoding("UTF-8");
3.12
3.13 PrintWriter out = response.getWriter();
3.14 -
3.15 +
3.16 try {
3.17
3.18 akce parametrAkce = akce.chyba;
3.19 @@ -51,15 +51,17 @@
3.20 /** Chyba nebo podvržený AJAXový požadavek → zobrazíme chybovou hlášku */
3.21 }
3.22
3.23 +
3.24 Ajax a = new Ajax();
3.25 + String idSezeni = request.getRequestedSessionId();
3.26
3.27
3.28 switch (parametrAkce) {
3.29 case vykonat:
3.30 - out.println(a.geSQLVysledek(request.getParameter("sql")));
3.31 + out.println(a.geSQLVysledek(request.getParameter("sql"), idSezeni));
3.32 break;
3.33 case historie:
3.34 - out.println(a.geSQLVysledek(request.getRequestedSessionId()));
3.35 + out.println(a.getHistorie(idSezeni));
3.36 break;
3.37 case test:
3.38 out.println("<p>AJAX jede!</p>");
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java Fri May 29 00:13:11 2009 +0200
4.3 @@ -0,0 +1,79 @@
4.4 +package cz.frantovo.sql.vyuka.dto;
4.5 +
4.6 +import cz.frantovo.sql.vyuka.Html;
4.7 +
4.8 +/**
4.9 + * Hláška úspěšného provedení.
4.10 + * @author fiki
4.11 + */
4.12 +public class Hlaska implements HtmlObjekt {
4.13 +
4.14 + private String text;
4.15 + private Typ typ;
4.16 + private boolean escapovat;
4.17 +
4.18 + /**
4.19 + * SQL hláška
4.20 + * @param text text hlášky
4.21 + * @param typ ovlivňuje ikonku
4.22 + * @param escapovat zda máme escapovat text kvůli HTML značkám
4.23 + */
4.24 + public Hlaska(String text, Typ typ, boolean escapovat) {
4.25 + this.text = text;
4.26 + this.typ = typ;
4.27 + this.escapovat = escapovat;
4.28 + }
4.29 +
4.30 + /**
4.31 + * SQL hláška
4.32 + * @param text text hlášky
4.33 + * @param typ ovlivňuje ikonku
4.34 + */
4.35 + public Hlaska(String text, Typ typ) {
4.36 + this.text = text;
4.37 + this.typ = typ;
4.38 + this.escapovat = true;
4.39 + }
4.40 +
4.41 + public String getHtml() {
4.42 + String hodnota;
4.43 + if (isEscapovat()) {
4.44 + hodnota = Html.escapuj(text);
4.45 + } else {
4.46 + hodnota = text;
4.47 + }
4.48 + return "<p class=\"vysledek" + getTyp().name() + "\">" + hodnota + "</p>";
4.49 + }
4.50 +
4.51 + public String getText() {
4.52 + return text;
4.53 + }
4.54 +
4.55 + public void setText(String hodnota) {
4.56 + this.text = hodnota;
4.57 + }
4.58 +
4.59 + public Typ getTyp() {
4.60 + return typ;
4.61 + }
4.62 +
4.63 + public void setTyp(Typ typ) {
4.64 + this.typ = typ;
4.65 + }
4.66 +
4.67 + public boolean isEscapovat() {
4.68 + return escapovat;
4.69 + }
4.70 +
4.71 + public void setEscapovat(boolean escapovat) {
4.72 + this.escapovat = escapovat;
4.73 + }
4.74 +
4.75 + public enum Typ {
4.76 +
4.77 + OK,
4.78 + Tip,
4.79 + Varovani,
4.80 + Chyba
4.81 + }
4.82 +}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/HtmlObjekt.java Fri May 29 00:13:11 2009 +0200
5.3 @@ -0,0 +1,10 @@
5.4 +package cz.frantovo.sql.vyuka.dto;
5.5 +
5.6 +/**
5.7 + * HTML objekt.
5.8 + * @author fiki
5.9 + */
5.10 +public interface HtmlObjekt {
5.11 +
5.12 + public String getHtml();
5.13 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java Fri May 29 00:13:11 2009 +0200
6.3 @@ -0,0 +1,74 @@
6.4 +package cz.frantovo.sql.vyuka.dto;
6.5 +
6.6 +import cz.frantovo.sql.vyuka.Html;
6.7 +import java.util.ArrayList;
6.8 +import java.util.Collection;
6.9 +
6.10 +/**
6.11 + * Tabulka, která je výsledkem SQL dotazu.
6.12 + * @author fiki
6.13 + */
6.14 +public class Tabulka implements HtmlObjekt {
6.15 +
6.16 + private String[] zahlavi;
6.17 + private Collection<Object[]> hodnoty = new ArrayList<Object[]>();
6.18 +
6.19 + public String getHtml() {
6.20 +
6.21 + if (getZahlavi() == null || getHodnoty() == null || getZahlavi().length < 1) {
6.22 + return "<p>Chybná tabulka</p>";
6.23 + } else {
6.24 +
6.25 + StringBuffer html = new StringBuffer();
6.26 +
6.27 + html.append("<table>");
6.28 +
6.29 +
6.30 + html.append("<thead title=\"Chceš setřídit výsledek podle nějakého sloupce? Co takhle ORDER BY sloupec.\">");
6.31 + html.append("<tr>");
6.32 + for (String z : getZahlavi()) {
6.33 + html.append("<td>" + Html.escapuj(z) + "</td>");
6.34 + }
6.35 + html.append("</tr>");
6.36 + html.append("</thead>");
6.37 +
6.38 +
6.39 + html.append("<tbody>");
6.40 + for (Object[] hh : getHodnoty()) {
6.41 + for (Object h : hh) {
6.42 + html.append(formatujRadek(h));
6.43 + }
6.44 + }
6.45 + html.append("</tbody>");
6.46 +
6.47 + html.append("</table>");
6.48 +
6.49 +
6.50 + return html.toString();
6.51 + }
6.52 + }
6.53 +
6.54 + private String formatujRadek(Object o) {
6.55 + if (o instanceof Integer) {
6.56 + return "<td class=\"cislo\">" + Html.escapuj(String.valueOf(o)) + "</td>";
6.57 + } else {
6.58 + return "<td>" + Html.escapuj(String.valueOf(o)) + "</td>";
6.59 + }
6.60 + }
6.61 +
6.62 + public String[] getZahlavi() {
6.63 + return zahlavi;
6.64 + }
6.65 +
6.66 + public void setZahlavi(String[] zahlavi) {
6.67 + this.zahlavi = zahlavi;
6.68 + }
6.69 +
6.70 + public Collection<Object[]> getHodnoty() {
6.71 + return hodnoty;
6.72 + }
6.73 +
6.74 + public void setHodnoty(Collection<Object[]> hodnoty) {
6.75 + this.hodnoty = hodnoty;
6.76 + }
6.77 +}
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java Fri May 29 00:13:11 2009 +0200
7.3 @@ -0,0 +1,36 @@
7.4 +package cz.frantovo.sql.vyuka.dto;
7.5 +
7.6 +import java.util.ArrayList;
7.7 +import java.util.Collection;
7.8 +
7.9 +/**
7.10 + * Výsledek SQL dotazu
7.11 + * @author fiki
7.12 + */
7.13 +public class VysledekSQL implements HtmlObjekt {
7.14 +
7.15 + private Collection<Tabulka> tabulky = new ArrayList<Tabulka>();
7.16 + private Collection<Hlaska> hlasky = new ArrayList<Hlaska>();
7.17 +
7.18 + public Collection<Tabulka> getTabulky() {
7.19 + return tabulky;
7.20 + }
7.21 +
7.22 + public Collection<Hlaska> getHlasky() {
7.23 + return hlasky;
7.24 + }
7.25 +
7.26 + public String getHtml() {
7.27 + StringBuffer html = new StringBuffer();
7.28 +
7.29 + for (Tabulka t : tabulky) {
7.30 + html.append(t.getHtml());
7.31 + }
7.32 +
7.33 + for (Hlaska h : hlasky) {
7.34 + html.append(h.getHtml());
7.35 + }
7.36 +
7.37 + return html.toString();
7.38 + }
7.39 +}
8.1 --- a/java/sql-vyuka/web/hlavni.js Thu May 28 23:12:19 2009 +0200
8.2 +++ b/java/sql-vyuka/web/hlavni.js Fri May 29 00:13:11 2009 +0200
8.3 @@ -86,7 +86,7 @@
8.4 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
8.5 function ajaxZobrazitHistorii() {
8.6 if (ajax.readyState == 4 || ajax.readyState == 0) {
8.7 - ajax.open("POST", 'historie.html', true);
8.8 + ajax.open("POST", 'ajax?akce=historie', true);
8.9 ajax.onreadystatechange = zobrazitHistoriiVypis;
8.10 ajax.send(null);
8.11 }