-
1. Re: @In (create=true)
christian.bauer Jun 7, 2007 5:38 AM (in response to blackers)Yes, it should be. Show TeamHome.java.
-
2. Re: @In (create=true)
blackers Jun 7, 2007 5:47 AM (in response to blackers)Here is the important part from TeamHome.java (as generated by seam-gen)
@Name("teamHome")
public class TeamHome extends EntityHome<Team> {
private static final long serialVersionUID = -6503138100502127742L;
@In(create = true)
ClubHome clubHome;
@In(create = true)
GradeHome gradeHome;
...
should the @Name here match the @In attributes name from GameHome.java? -
3. Re: @In (create=true)
blackers Jun 7, 2007 5:53 AM (in response to blackers)The reason I have changed
@In (create=true) TeamHome teamHome;
to@In (create=true) TeamHome oppTeamHome;
is because I also have a second TeamHome attribute in GameHome.java@In(create = true) TeamHome oppTeamHome; @In(create = true) RoundHome roundHome; @In(create = true) GroundHome groundHome; @In(create = true) TeamHome homeTeamHome;
Do i need to rename TeamHome.java to OppTeamHome.java and make another similar class called HomeTeamHome.java.
My database table Game has multiple foreign keys to the same table Team. -
4. Re: @In (create=true)
tazman Jun 7, 2007 6:17 AM (in response to blackers)Use
@In(create=true, value="contextVariableName")
tazman -
5. Re: @In (create=true)
blackers Jun 7, 2007 6:25 AM (in response to blackers)I have tried this with the same results.
-
6. Re: @In (create=true)
christian.bauer Jun 7, 2007 6:37 AM (in response to blackers)What do you want? Two local fields referencing the _same instance_ of the TeamHome component or two instances?
-
7. Re: @In (create=true)
blackers Jun 7, 2007 6:39 AM (in response to blackers)They should both be referencing 2 separate instances.
-
8. Re: @In (create=true)
christian.bauer Jun 7, 2007 6:45 AM (in response to blackers)Interesting, I don't think this is actually possible.
-
9. Re: @In (create=true)
blackers Jun 7, 2007 7:00 AM (in response to blackers)I should have said They should both be referencing a separate instance each.
not 2 instances each if that is not clear.
I have a set up simplified to the following.
Table Game
========
game_id
home_team_id --> fkey to table team field team_id
opp_team_id --> fkey to table team field team_id
Table Team
========
team_id
team_name
eg.
Table Game
========
game_id | home_team_id | opp_team_id
-------------------------------------------------
1 | 1 | 2
2 | 3 | 2
Table Team
========
team_id | team_name
--------------------------
1 | Team A
2 | Team B
3 | Team C
So what I want is to have is for the record with game_id 1 should have homeTeamHome pointing to an instance of team with team_id 1 (Team A) and oppTeamHome pointing to an instance of team with team_id 2 (Team B).
So from my facelet page i could reference Team B by #{gameHome.oppTeamHome.instance.team_name} and Team A by #{gameHome.homeTeamHome.instance.team_name} -
10. Re: @In (create=true)
christian.bauer Jun 7, 2007 7:05 AM (in response to blackers)Do you really need this to be TeamHome components? If you are not editing the Team entity instances, you could just reference them directly in GameHome for display.
-
11. Re: @In (create=true)
blackers Jun 7, 2007 7:14 AM (in response to blackers)I will also be adding new games to the table, The reason I am using the Home components is because this is the way seam gen did it for other table I have generated (they only had single foreign keys to any other table). I would like the option to be able to click a button to add an oponent team to the game and click a button to add a home team to the game, the same way seam gen does it. I will look into a direct reference to the entity from Game Home.
-
12. Re: @In (create=true)
blackers Jun 7, 2007 8:21 AM (in response to blackers)In the end to get it working i duplicated TeamHome.java and renamed the original too.
Now i have HomeTeamHome.java and OppTeamHome.java
with seam names
@Name("homeTeamName")
&
@Name("oppTeamName")
respectively.
With a few changes to TeamList.xhtml, TeamList.page.xml, GameEdit.xhtml and GameEdit.page.xml (based on the versions generated by seam gen) I got the desired result.
GameEdit.page.xml<param name="oppTeamTeamId" value="#{oppTeamHome.teamTeamId}"/> <param name="homeTeamTeamId" value="#{homeTeamHome.teamTeamId}"/>
GameEdit.xhtml
(changes in bold/red)<div class="actionButtons"> <s:button value="Select Away Team" view="/TeamList.xhtml"> <f:param name="from" value="GameEdit"/> <f:param name="forOppTeam" value="1"/> </s:button> </div>
and<div class="actionButtons"> <s:button value="Select Home Team" view="/TeamList.xhtml"> <f:param name="from" value="GameEdit"/> <f:param name="forHomeTeam" value="1"/> </s:button> </div>
TeamList.page.xml<param name="forOppTeam"/> <param name="forHomeTeam"/>
TeamList.xhtml<s:link view="/#{empty from ? 'Team' : from}.xhtml" value="#{team.teamName}" id="team" rendered="#{not empty forOppTeam}"> <f:param name="oppTeamTeamId" value="#{team.teamId}"/> </s:link> <s:link view="/#{empty from ? 'Team' : from}.xhtml" value="#{team.teamName}" id="team" rendered="#{not empty forHomeTeam}"> <f:param name="homeTeamTeamId" value="#{team.teamId}"/> </s:link>
There is probably a nicer way to do the last block without making 2 separate links and only rendering the appropriate one based on the forXXXXTeam value being used. But my JSF knowledge is pretty minimal at the moment. A rendered attribute for the f:param tag would have been nice.
Thanks for all of your help -
13. Re: @In (create=true)
gmarcus Jun 7, 2007 8:22 AM (in response to blackers)Why couldn't you use @Role to define 2 known context names for the same component? There is an example in the Seam Docs.
-
14. Re: @In (create=true)
blackers Jun 7, 2007 8:24 AM (in response to blackers)It would be nice that since OppTeamHome.java and HomeTeamHome.java are identical except for the class name and the seam @Name that I would be able to use a single class for both instances.