Olá
Estou criando uma classe Noticia que possui o atributo destaque, que tem os valores principal e secundário.
Então quando eu cadastrar uma nova noticia como principal eu devo buscar no banco de dados uma principal e passa-la para secundária e só depois cadastrar a nova notícia, e estou usando o Hibernate para gerar as minhas classes.
O erro que da é que eu acho que não se pode usar o DAO + de 1 vez, tipo buscar o principal, setar como secundario e depois incluir.
Estou usando multipart pois tenho que upar uma foto para notícia...
minha jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>JSP Page</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<%
String op = "incluir";
if (request.getParameter("op") != null) {
op = request.getParameter("op");
}
Date date = new Date();
String data = new SimpleDateFormat("dd/MM/yyyy").format(date);
String at = "";
String de = "";
String pr = "";
String se = "";
String ne = "";
String titulo = "";
String caminho = "";
String id = "";
String conteudo = "";
String status = "";
String destaque = "";
if (op.equals("editar")) {
status = request.getParameter("status");
destaque = request.getParameter("destaque");
titulo = request.getParameter("titulo");
id = request.getParameter("id");
caminho = request.getParameter("caminho");
conteudo = request.getParameter("conteudo");
}
%>
</head>
<body>
<div id="main_content">
<div id="center_banner">
<jsp:include page="banner_Painel_Controle.jsp" />
</div>
<div id="page_content">
<jsp:include page="menu_Painel_Controle.jsp" />
<div id="right_section">
<div class="right_box">
<div class="title"> Formulario de Cadastro de Notícias</div>
<div class="content">
<br><br><br>
<form action="noticiaCRUD" method="POST" enctype="multipart/form-data">
<input type="hidden" name="id" value="<%=id%>" />
<input type="hidden" name="op" value="<%=op%>" />
<input type="hidden" name="data" value="<%=data%>" />
<table border="0">
<tr>
<td>Título:</td>
<td><input type="text" name="titulo" value="<%=titulo%>" size="75" /></td>
</tr>
<tr>
<td>Foto:</td>
<td><input type="file" name="caminho" value="<%=caminho%>" /></td>
</tr>
<tr><td>Status:
</td>
<td><select name="status">
<% if(status.equals("1")){
at = "selected";
} if(status.equals("2")){
de = "selected";
} %>
<option value="1" <%=at%> >ATIVADA</option>
<option value="2" <%=de%> >DESATIVADA</option>
</select> </td>
</tr>
<tr><td>Destaque:
</td>
<td><select name="destaque">
<% if(destaque.equals("1")){
pr = "selected";
} if(destaque.equals("2")){
se = "selected";
} if(destaque.equals("3")){
ne = "selected";
}%>
<option value="3" <%=ne%> > </option>
<option value="1" <%=pr%> >PRINCIPAL</option>
<option value="2" <%=se%> >SECUNDÁRIA</option>
</select> </td>
</tr>
<tr>
<td> </td>
<td></td>
</tr>
<tr>
<td valign="top" >Conteúdo:</td>
<td><textarea style="width:99%" cols="10" rows="15" name="conteudo"><%=conteudo%></textarea></td>
</tr>
<tr>
<td> </td>
<td></td>
</tr>
<tr>
<td align="right" ><input type="submit" value=" Enviar " /></td>
<td width="120" align="center" ><input type="reset" value=" Resetar " /></td>
</tr>
</table>
</form>
</div>
</div>
<div class="right_box"></div>
</div>
</div>
</div>
</body>
</html>
Servlet q uso para incluir, editar, etc..
public class noticiaCRUD extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, FileUploadException {
try {
response.setContentType("text/html;charset=iso-8859-1");
String caminho = "";//request.getParameter("caminho");
String arq = "";
caminho = caminho.replace('\\', '/');
String titulo = "";
String conteudo = "";
String op = "";
String id = "";
String data = "";
String status = "";
String destaque = "";
String caminhoTemp = getServletContext().getRealPath("/") + "/temp";
//String pasta="c:\\arquivos 01\\";
String pasta = getServletContext().getRealPath("/") + "arquivos/pos/noticia/";
//String pasta="/home/"+site+"/public_html/upload/";
//String descricao .getHeader("nome");
NoticiaDAO dao = new NoticiaDAO();
if (FileUpload.isMultipartContent(request)) {
DiskFileUpload upload = new DiskFileUpload();
upload.setRepositoryPath(caminhoTemp);
upload.setSizeMax[telefone removido]);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
if (item.getFieldName().equals("caminho")) {
try {
caminho = pasta + item.getName().toString();
File arquivo = new File(caminho);
item.write(arquivo);
arq = arquivo.getName();
} catch (Exception ex) {
Logger.getLogger(noticiaCRUD.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
if (item.isFormField()) {
if (item.getFieldName().equals("op")) {
op = item.getString();
}
if (item.getFieldName().equals("titulo")) {
titulo = item.getString();
}
if (item.getFieldName().equals("conteudo")) {
conteudo = item.getString();
}
if (item.getFieldName().equals("data")) {
data = item.getString();
}
if (item.getFieldName().equals("destaque")) {
destaque = item.getString();
}
if (item.getFieldName().equals("status")) {
status = item.getString();
}
}
}
int status2 = Integer.parseInt(status);
int destaque2 = Integer.parseInt(destaque);
Date date = new Date();
date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
if (op.equals("incluir")) {
Noticia noticia = new Noticia();
Noticia noticia2 = new Noticia();
if (destaque2 == 1) {
List<Noticia> principal = dao.buscarPrincipal(1);
noticia2.setIdNoticia(principal.get(0).getIdNoticia());
noticia2.setConteudo(principal.get(0).getConteudo());
noticia2.setData(principal.get(0).getData());
noticia2.setFoto(principal.get(0).getFoto());
noticia2.setTitulo(principal.get(0).getTitulo());
noticia2.setStatus(principal.get(0).getStatus());
noticia2.setDestaque(3);
dao.editar(noticia2);
}
noticia.setTitulo(titulo);
noticia.setConteudo(conteudo);
noticia.setFoto(arq);
noticia.setData(date);
noticia.setDestaque(destaque2);
noticia.setStatus(status2);
dao.incluir(noticia);
}
if (op.equals("editar")) {
Noticia noticiae = new Noticia();
int ide = Integer.parseInt(id);
noticiae.setTitulo(titulo);
noticiae.setFoto(arq);
noticiae.setConteudo(conteudo);
noticiae.setIdNoticia(ide);
noticiae.setData(date);
noticiae.setDestaque(destaque2);
noticiae.setStatus(status2);
dao.editar(noticiae);
}
}
} catch (ParseException ex) {
Logger.getLogger(noticiaCRUD.class.getName()).log(Level.SEVERE, null, ex);
} finally {
RequestDispatcher rd = null;
rd = request.getRequestDispatcher("listaNoticia.jsp");
rd.forward(request, response);
}
}
}
Não da erro no browser, só que simplesmente ele cadastra noticia quando é de nenhum tipo, ou seja, destaque igual a 3, e quando destaque igual a 2 que será secundária mas quando destaque igual e 1 não inclui nem nada...
Erro do apache:
19/04/2011 13:52:10 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet noticiaCRUD threw exception
org.hibernate.SessionException: Session was already closed
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:275)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy1.close(Unknown Source)
at controle.NoticiaDAO.incluir(NoticiaDAO.java:20)
at servlet.noticiaCRUD.processRequest(noticiaCRUD.java:122)
at servlet.noticiaCRUD.doPost(noticiaCRUD.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:662)
thanks :)