So I've been making a Webapplication with classic CRUD via JPA. The database is also used for login-functions. I use JSF with Facelets for View.
JSF can manage beans easily e.g (value="#{myBean.value}")
So I thought that the Bean could be a @Entity. I even have a book that use it like that.
I then Inject the bean in my Facade (a DAO) that should persist it.
I checked so that it had the values that I gave from the View (JSF-form).
But here's the kicker!
I get "java.lang.IllegalArgumentException: Unknown entity: myclass#$Proxy$_$$_WeldClientProxy".
I tried of writing the classes manually in the persistance.xml without any luck.
After a lot of digging, I learned that the Bean that Weld injects (I use Wildfly-server that uses Weld) you doesn't actually get a real instance of your bean. You get a Proxy. So I could get the values, but it was not seen as an Entity.
I confirmed this by making a manual instance of the bean and persisting it with the same Facade-code.
The only difference was the Injection.
So my solution was to make a controller bean which had a manually created field of the bean. And use that bean e.g (value="controllerBean.myBean.value")
The controller bean then used the Facade for persistance.
This solution works for me, the controller bean can then do some validation and more.
Fine and dandy!
No comments:
Post a Comment