Witam Wszystkich serdecznie!
Mam problem z pewnym zadaniem, otóż mam do zrobienia aplikację webową w technologii jsp z użyciem wyłącznie <jsp:useBean ... />,
<jsp:setParameter ... />., <jsp:getParameter ... />. oraz ewentualnie <%=wyrażenie%>. Mam 3 problemy:
- Przy wyborze czegokolwiek z listy rozwijalnej(koloru), jest on stosowany/rozpoznawany dopiero po dwukrotnym przeładowaniu strony
- Ten sam błąd występuje podczas kliknięcia 1 z 2 przycisków, również muszę przeładować dwukrotnie stronę, aby zatwierdzić mój wybór
- Czy da się jakoś zablokować, żeby <%=wyrażenie%> nie było wykonywane przy każdym odświeżeniu strony, tylko np przy kliknięciu określonego przycisku?
Oto plik .jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="kolo" class="wcy.Kolka" scope="session"></jsp:useBean>
<div align="left">
<form method="get" action="<%kolo.wyznaczKolor(); %>">
<label>Podaj X</label>
<input type="text" name="DajX"/>
<jsp:setProperty property="x" name="kolo" param="DajX"/>
<label>Podaj Y</label>
<input type="text" name="DajY"/>
<jsp:setProperty property="y" name="kolo" param="DajY"/>
<label>Podaj Promień</label>
<input type="text" name="DajPromien"/>
<jsp:setProperty property="promien" name="kolo" param="DajPromien"/>
<label>Czy wypełnione?</label>
<input type="radio" name="DajCzyPelne" value="y" checked="checked" >Wypełnione
<input type="radio" name="DajCzyPelne" value="n">Nie wypełnione
<jsp:setProperty property="czyPelne" name="kolo" param="DajCzyPelne" />
<input type="submit" name="btn" value="Rysuj">
<input type="submit" name="btn" value="Wyczysc" >
<jsp:setProperty property="btn" name="kolo" param="btn"/>
<select name="kolor" >
<option label="Czerwone" value="1" selected="selected"/>
<option label="Zielone" value="2" />
<option label="Niebieskie" value="3" />
<option label="Żółte" value="4" />
<option label="Fioletowe" value="5"/>
<option label="Błękitne" value="6" />
<jsp:setProperty property="kolor" name="kolo" param="kolor"/>
</select>
</form>
</div>
<img alt="Nic" src="<%=kolo.getObraz() %>" align="right">
</body>
</html>
oraz mój bean:
package wcy;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Kolka {
int x,y, promien,kolor;
String pelne, czyPelne, obraz, btn="Rysuj";
Color c;
boolean b;
public String getObraz(){return obraz;}
public String getBtn(){return btn;}
public void setBtn(String btn){this.btn=btn;}
public int getX(){return x;}
public void setX(int x){this.x=x;}
public int getY(){return y;}
public void setY(int y){this.y=y;}
public int getPromien(){return promien;}
public void setPromien(int promien){this.promien=promien;}
public void setCzyPelne(String czyPelne){
if(czyPelne.equalsIgnoreCase("y"))b=true;
else b=false;
this.czyPelne=czyPelne;}
public String getCzyPelne(){return czyPelne;}
public int getKolor(){return kolor;}
public void setKolor(int kolor){this.kolor=kolor;}
public void wyznaczKolor(){
try{
rysuj(getX(),getY(),getPromien(),this.c,b);
System.out.println(this.kolor+"|"+getKolor()+"|"+this.btn);
}
catch(IOException e){/*przekierowanie do strony z bledem*/}
catch(Exception en){/*przekierowanie do strony z bledem*/}
}
public void rysuj(int x,int y, int promien, Color c, boolean czyPelne) throws IOException{
BufferedImage image=new BufferedImage(600, 600, BufferedImage.TYPE_INT_RGB );
File file=new File("obraz.png");
obraz=file.getAbsolutePath();
int a=getKolor();
switch(a){
case 1:c=Color.RED;break;
case 2:c=Color.GREEN;break;
case 3:c=Color.BLUE;break;
case 4:c=Color.YELLOW;break;
case 5:c=Color.MAGENTA;break;
case 6:c=Color.CYAN;break;
}
System.out.println(obraz);
if(file.exists())image=ImageIO.read(file);
Graphics graphic=image.createGraphics();
graphic.setColor(c);
if(czyPelne==true)graphic.fillOval(x, y, promien*2, promien*2);
else graphic.drawOval(x, y, promien*2, promien*2);
ImageIO.write(image, "png", file);
}
}
Z góry bardzo dziękuje za wszelką pomoc
P.S. To mój pierwszy wpis na forum