[jbossseam-issues] [JBoss JIRA] Closed: (JBSEAM-1161) s:link breaks @DataModelSelection functionallity, when having a page action
Gavin King (JIRA)
jira-events at lists.jboss.org
Tue Jun 12 19:06:11 EDT 2007
[ http://jira.jboss.com/jira/browse/JBSEAM-1161?page=all ]
Gavin King closed JBSEAM-1161.
------------------------------
Fix Version/s: (was: 1.3.0.BETA1)
Resolution: Rejected
Well, there was a bug like this in 1.2 that is already fixed in 1.3 but .... your code is NEVER going to work because it assumes that a PAGE-scoped datamodel would be propagated across an s:link, which is not a reasonable expectation!
You need to either init up the DataModel with an @Factory, or use some other scope.
Switching to h:commandLink also solved the problem.
> s:link breaks @DataModelSelection functionallity, when having a page action
> ---------------------------------------------------------------------------
>
> Key: JBSEAM-1161
> URL: http://jira.jboss.com/jira/browse/JBSEAM-1161
> Project: JBoss Seam
> Issue Type: Bug
> Affects Versions: 1.2.1.GA
> Environment: Seam 1.2.1.GA, MyFaces 1.1.6 nighly from march, Facelets 1.1.11
> Reporter: Daniel Wiell
> Assigned To: Gavin King
>
> If a s:link is used to select a row in a dataTable. A field annotated with @DataModelSelection always get the first row of the dataModel **if** the view has a page action. When the page action is removed or a regular h:commandLink is used, everything works as expected.
> Here are some code to help reproducing this:
> ------------------------ The controller
> @Name("fruitStore")
> public class FruitStore {
> public static final List<Fruit> FRUITS = Arrays.asList(
> new Fruit(1, "Apple", "Red"),
> new Fruit(2, "Pear", "Green"),
> new Fruit(3, "Orange", "Orange"),
> new Fruit(4, "Banana", "Yellow"));
> @DataModel(scope = ScopeType.PAGE)
> private List<Fruit> fruits = FRUITS;
> @DataModelSelection
> private Fruit selectedFruit;
> public Fruit getSelectedFruit() { return selectedFruit; }
> public String init() { return null; }
> }
> ------------------------ The domain object
> public class Fruit {
> private long id;
> private String name;
> private String color;
> public Fruit(long id, String name, String color) {
> this.id = id;
> this.name = name;
> this.color = color;
> }
> public long getId() { return id; }
> public void setId(long id) { this.id = id; }
> public String getName() { return name; }
> public void setName(String name) { this.name = name; }
> public String getColor() { return color; }
> public void setColor(String color) { this.color = color; }
> }
> ------------------------ Relavant parts from pages.xml
> <page view-id="/fruitSelection.xhtml" action="#{fruitStore.init}">
> <navigation>
> <rule if-outcome="selectFruit">
> <begin-conversation/>
> <redirect view-id="/fruitOverview.xhtml">
> <param name="fruitId" value="#{fruitStore.selectedFruit.id}"/>
> </redirect>
> </rule>
> </navigation>
> </page>
> ------------------------ fruitSelection.xhtml
> <?xml version='1.0' encoding='UTF-8'?>
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:s="http://jboss.com/products/seam/taglib">
> <head></head>
> <body>
> <h:form>
> Select a fruit:
> <h:dataTable var="fruit" value="#{fruits}">
> <h:column>
> <!-- The page action (action="#{fruitStore.init}") breaks the @DataModelSelection
> functionallity. It always get the first row.
> When removing the page action everything works -->
> <s:link value="#{fruit.name}" action="selectFruit"/>
> </h:column>
> <h:column>
> <!-- This works -->
> <h:commandLink value="#{fruit.name}" action="selectFruit"/>
> </h:column>
> </h:dataTable>
> </h:form>
> </body>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list