[
https://issues.apache.org/jira/browse/ORCHESTRA-28?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Kitching resolved ORCHESTRA-28.
-------------------------------------
Resolution: Fixed
Fixed in trunk. Orchestra now does checks for unaccessed conversations only
after rendering a new view. On validation-failure the viewId does not change,
so unaccessed conversations are never discarded due to validation failure.
> Conversation (Access) is lost when jsf validation fails
> -------------------------------------------------------
>
> Key: ORCHESTRA-28
> URL: https://issues.apache.org/jira/browse/ORCHESTRA-28
> Project: MyFaces Orchestra
> Issue Type: Bug
> Components: Conversation
> Affects Versions: 1.1
> Reporter: Stefan Glase
> Priority: Critical
>
> I am loosing my conversation the bean CategoryController is in, when
> required-validation in the view fails.
> Without further investigation it looks like it can be explained in the
> following way: Orchestra uses a proxy-class to notice calls to
> bean-methods,-getters or -setters while in the conversation and when there is
> no direct access to the bean from the view, the access scope will be lost.
> That is fine in standard cases but when calls only go to the extending class
> this behaviour should be considered wrong.
> My ugly workaround can be seen in the bottom of the CategoryController
> implementation and the view, where I fetch this fake-property just to have a
> call to a bean-method.
> ***************************************************************************************************************************
> Class: CategoryController
> ***************************************************************************************************************************
> @Controller
> @Scope("conversation.access")
> public class CategoryController extends AbstractCrudController<Category> {
> private CategoryService categoryService;
> @Resource
> public void setCategoryService(CategoryService categoryService) {
> this.categoryService = categoryService;
> }
> @Override
> protected CategoryService getService() {
> return this.categoryService;
> }
> /**
> * Bug: Orchestra invalidiert eine Klasse X, welche eine Klasse Y
> erweitert, wenn in einem
> * Request-Zyklus lediglich Zugriffe auf Methoden und Properties von Y
> erfolgt sind.
> *
> * @return Leerer String
> */
> public String getBug() {
> return "";
> }
> }
> ***************************************************************************************************************************
> Class: AbstractCrudController
> ***************************************************************************************************************************
> public abstract class AbstractCrudController<T extends PersistentEntity> {
> private T entity;
> public T getEntity() {
> return entity;
> }
> }
> ***************************************************************************************************************************
> View: categoryEditForm.xhtml
> ***************************************************************************************************************************
> <h:form>
> <h:panelGrid columns="3">
> <h:outputLabel value="#{msg.category_name}" for="name" />
> <h:inputText size="40" id="name"
> value="#{categoryController.entity.name}"
> required="true" />
> <h:message for="name" />
> <h:outputLabel value="#{msg.category_description}"
> for="description" />
> <h:inputTextarea rows="3" cols="40" id="description"
> value="#{categoryController.entity.description}"
> required="true" />
> <h:message for="description" />
> </h:panelGrid>
> <h:panelGrid columns="2">
> <h:commandButton action="#{categoryController.doSaveEntity}"
> value="#{msg.category_save}" />
> </h:panelGrid>
> <!-- === Bug === -->
> <h:outputText value="#{categoryController.bug}" />
> <!-- === End of Bug === -->
> </h:form>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.