Zaraz pewnie polecą teksty typu "wujek google zna odpowiedź", ale już chyba wszystkie możliwości wypróbowałem i nie wiem gdzie jest błąd. Wstawię trochę kodu a potem wytłumaczę.
Formularz z którego przekazuję zmienne
(...)
<h:form>
<table width="100%" cellpadding="4">
<tr>
<td bgcolor="#808080"><font color="#FFFFFF"><b>Odpowiedz</b></font></td>
<td align="left" bgcolor="#C0C0C0">
Nadawca:<br /> <h:inputText id="author" style="WIDTH: 99%" value="#{forumBean.post.author}" onfocus="if(this.value=='' || this.value == 'Anonim') this.value=''" onblur="if(this.value == '') {this.value=this.defaultValue}" onkeyup="keyUp();" required="true" />
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#808080"><font color="#FFFFFF"><b>Treść postu:</b></font><br /><h:inputTextarea id="text" value="#{forumBean.post.text}" required="true" style="WIDTH: 99%; HEIGHT: 113px" rows="5" cols="44" /></td>
</tr>
<tr>
<td bgcolor="#C0C0C0" colspan="2"><h:commandButton action="#{forumBean.addPost}" value="Wyślij" /></td>
</tr>
<!--<tr><td> </td></tr>-->
</table>
</h:form>
Metoda odczytująca i zapisująca dane w bazie
public List<Post> getPosts() {
EntityManager em = DBManager.getManager().createEntityManager();
List list = em.createQuery("SELECT p FROM Post p WHERE p.topic = " + this.topic.getId()).getResultList();
em.close();
return list;
}
public String addPost() {
EntityManager em = DBManager.getManager().createEntityManager();
em.getTransaction().begin();
post.setId(null);
post.setDate(new Date());
post.setTopic(this.topic.getId());
String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
em.createQuery("UPDATE Topic t SET t.lastpost='" + timestamp + "' WHERE t.id=" + this.topic.getId()).executeUpdate();
em.persist(post);
em.getTransaction().commit();
em.close();
this.post = new Post();
return "topic.xhtml";
}
Klasa DBManager
package okb.intranet.config;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
*
* @author Krzysztof
*/
public class DBManager {
private static DBManager instance;
private EntityManagerFactory emf;
private DBManager(){}
public synchronized static DBManager getManager(){
if(instance == null)
instance = new DBManager();
return instance;
}
public EntityManagerFactory createEntityManagerFactory(){
if(emf == null)
emf = Persistence.createEntityManagerFactory("IntranetPU");
return emf;
}
public EntityManager createEntityManager(){
return this.createEntityManagerFactory().createEntityManager();
}
public void closeEntityManagerFactory(){
if(emf != null)
emf.close();
}
}
Problem w tym, że podczas zapisywania danych do bazy, zamiast polskich liter zapisuje znaki zapytania. Jeżeli chodzi o odczyt danych i ich wyświetlenie wszystko jest OK, więc przypuszczam, że jest jakiś problem w metodzie addPost(). Używam frameworków Hibernate(JPA) i JSF, ścieżka do bazy danych w pliku konfiguracyjnym hibernate.cfg.xml to jdbc:mysql://localhost/dbname?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true. Ma ktoś jakiś pomysł ??