Van két fő entitásom, Question és Topic. a JSP oldalon a kérdés mellé válaszható egy Toic legördülő listából (one-many). Ezeket próbáltam:
http://ankeetmaini.wordpress.com/2012/08/01/binding-nested-objects-comp… and this: http://springinpractice.com/2012/01/07/making-formselect-work-nicely-us…
amikor a jsp megjelenik, kiírja a topic-ok id-it, tehát a formatter print-je lefut, de fordítva, a parse az nem. Van ötletetk miért lehet? köszi
@Entity
public class Question {
@Id
@Column(nullable = false)
//@GeneratedValue
private Integer qid;
@Column(nullable = false, length = 2000)
private String question;
@ManyToOne
@JoinColumn(name = "TID_FK")
private Topic topic;
...
@Entity
public class Topic {
@Id
@Column(nullable = false)
private Integer tid;
@Column(nullable = false, length = 200)
private String topicname;
@OneToMany(mappedBy = "topic")
private List[Question] questionList;
...
@Controller
@RequestMapping("/client")
public class QuestionController {
@Autowired
private QuestionBo questionBo;
@Autowired
private TopicBo topicBo;
@Autowired
private LoginBo loginBo;
@RequestMapping(method = RequestMethod.GET)
public ModelAndView listContacts(Map[String, Object] map) {
map.put("question", new Question());
map.put("topicList", topicBo.listTopics());
map.put("questionList", questionBo.listQuestions());
return new ModelAndView("client", "command", new barii.model.Question());
}
@RequestMapping(method = RequestMethod.POST)
public String addContact(@ModelAttribute("command") @Valid Question question, BindingResult result, Model model) {
question.setQid(100);
question.setClient(loginBo.getUser().getClient());
System.out.println("SAVE: "+question.toString());
System.out.println("SAVE: "+question.getTopic().getTopicname());
questionBo.addQuestion(question);
return "redirect:/client";
}
...
@Component
public class TopicFormatter implements Formatter[Topic] {
@Autowired
private TopicBo topicBo;
@Override
public String print(Topic topic, Locale arg1) {
System.out.println("???"+topic.getTid().toString());
return topic.getTid().toString();
}
@Override
public Topic parse(String tid, Locale arg1) throws ParseException {
System.out.println("!!!!!!!!!"+topicBo.getTopic(tid).toString());
return topicBo.getTopic(tid);
}
}
...
[form:form method="POST"]
[!-- form:errors path="userName" style="color:Red; list-style:none; padding:0"/--]
[p]Topic:[/p]
[p]
[form:select path="topic"]
[form:option value="" label="-- Valassz --" /]
[form:options items="${topicList}" itemValue="tid" itemLabel="topicname"/]
[/form:select]
[form:errors path="topic"]
[span class="help-inline"][form:errors path="topic" /][/span]
[/form:errors]
[/p]
[p]New question:[/p]
[p]
[form:textarea path="question" id="txaNewQuestion" cols="60" rows="10" /]
[/p]
[p]
[input type="submit" styleClass="ui-button ui-widget ui-state-default ui-corner-all" /]
[/p]
[/form:form]
....
[beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" ]
[mvc:annotation-driven conversion-service="conversionService"/]
[bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" ]
[property name="prefix" ]
[value]/WEB-INF/views/[/value]
[/property]
[property name="suffix" ]
[value].jsp[/value]
[/property]
[/bean]
[bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" ]
[property name="driverClassName" value="${database.driver}" /]
[property name="url" value="${database.url}" /]
[property name="username" value="${database.user}" /]
[property name="password" value="${database.password}" /]
[/bean]
[bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" ]
[property name="dataSource" ref="dataSource" /]
[property name="annotatedClasses" ]
[value]barii.model.Users[/value]
[value]barii.model.Client[/value]
[value]barii.model.Genius[/value]
[value]barii.model.Question[/value]
[value]barii.model.Answer[/value]
[value]barii.model.Topic[/value]
[/property]
[property name="hibernateProperties" ]
[props]
[prop key="hibernate.dialect" ]${hibernate.dialect}[/prop]
[prop key="hibernate.show_sql" ]${hibernate.show_sql}[/prop]
[/props]
[/property]
[/bean]
[bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" ]
[property name="sessionFactory" ref="sessionFactory" /]
[/bean]
[context:component-scan base-package="barii" scoped-proxy="targetClass" /]
[context:property-placeholder location="classpath:jdbc.properties" /]
[tx:annotation-driven transaction-manager="hibernateTransactionManager" /]
[bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"]
[property name="formatters"]
[set]
[ref bean="topicFormatter"/]
[/set]
[/property]
[/bean]
[bean id="topicFormatter" class="barii.formatters.TopicFormatter"/]
[/beans]
Kimenet
???1
???2
SAVE: barii.model.Question@592d716b[qid=100,question=sdfg,]
nov. 28, 2012 5:33:09 DU org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet dispatcher threw exception
java.lang.NullPointerException
at barii.controller.QuestionController.addContact(QuestionController.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
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.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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:722)
- 6554 megtekintés
Hozzászólások
Még van aki használ jsp-t? :)
--
HUPbeszolas FF extension
- A hozzászóláshoz be kell jelentkezni
tök mindegy az, iylen volt a tutorial, csak beadandó
---
Ubuntu one tárhely: https://one.ubuntu.com/referrals/referee/1503/
Dropbox: http://db.tt/XMk0ssk
- A hozzászóláshoz be kell jelentkezni
Akkor léptesd végig debuggerrel.
--
HUPbeszolas FF extension
- A hozzászóláshoz be kell jelentkezni
hova kéne töréspontot tennem?
---
Ubuntu one tárhely: https://one.ubuntu.com/referrals/referee/1503/
Dropbox: http://db.tt/XMk0ssk
- A hozzászóláshoz be kell jelentkezni
Én ez elé a sor elé tenném, mivel itt száll el: QuestionController.addContact(QuestionController.java:45)
Érdemes lehet azt a sort, amiben több művelet van több sorba szétcsapni, akkor a kiadott sorból azonnal látszik, hogy hol van az NPE. Persze a debuggert léptetve is kiderül, ez csak ízlés kérdése.
- A hozzászóláshoz be kell jelentkezni
System.out.println("SAVE: "+question.toString());
System.out.println("SAVE: "+question.getTopic().getTopicname());
a másodikban száll el, mert a topic null.. Én ezt tudom.. csak azt nem, hogy miért nem fut le a parse
---
Ubuntu one tárhely: https://one.ubuntu.com/referrals/referee/1503/
Dropbox: http://db.tt/XMk0ssk
- A hozzászóláshoz be kell jelentkezni
Kerdezhetek egy hulyeseget? A formatter valojaban miert kell? Nekem ezt implicite csinalja a spring, igaz en enumokkal jatszok, ami talan picit egyszerubb. Majd megnezem modellel is holnap.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
el tudod küldeni a te megoldásodat?
köszi
---
Ubuntu one tárhely: https://one.ubuntu.com/referrals/referee/1503/
Dropbox: http://db.tt/XMk0ssk
- A hozzászóláshoz be kell jelentkezni
Jobbat mondok, itt a komplett forras, a jtranslate-app -on belul keresgelj, ezen belul is a me.hron.jtranslate.app.TranslateController az, ami teged erdekelni fog controller oldalon, es a WEB-INF/views/translate/index.jspx.
Az enumot a jtranslate-api -ban talalod meg, a me.hron.jtranslate.core.Language osztalyban.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Miert, mit kene hasznalni helyette?
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám
- A hozzászóláshoz be kell jelentkezni
wicket? thymeleaf? vaadin/gwt? van választék dögivel.
--
HUPbeszolas FF extension
- A hozzászóláshoz be kell jelentkezni
Ezek miben egyszerubbek mint a JSP? Tehat teszemfel, egy ketoldalas apphoz erdemes belevagni ezekbe?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Minden a feladattól függ.
--
HUPbeszolas FF extension
- A hozzászóláshoz be kell jelentkezni
nem értem
kivettem, hogy itemValue="tid" itemLabel="topicname"
és lefutott a parse. Utána vissza tettem, és megint lefutott. És napok óta ezzel szenvedtem.
---
Ubuntu one tárhely: https://one.ubuntu.com/referrals/referee/1503/
Dropbox: http://db.tt/XMk0ssk
- A hozzászóláshoz be kell jelentkezni