You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Cuong Viet Hoang <cl...@gmail.com> on 2006/01/02 08:20:34 UTC

Master-detail design decision

Hi all,

I'm pretty new to JSF. In my very first JSF application, I have a class
called TestManager which contains an object of class Test. Now I have a
table that renders a list of Test objects. On each row, there is a link to
edit the current 'Test' object. When the link is clicked, an action method
is called, which will populate 'test' object in TestManager managed bean
using the id on the clicked row. Currently, I have to store a TestManager
managed bean in session scope for the application to work.

I download MyFaces examples and have a look at the master-detail examples. I
found out that, there are two forms in the example: countryListForm and
countryForm. But in real life, we'll probably have Country class which
encapsulate information about country such as country code, name...
Therefore, countryForm managed bean is kind of repeating that information.
However, by designing application like this, we don't have to store managed
bean in session scope.

My question is, which one is the better design?

Test.java

*public* *class* Test {
	*private* *int* id;
	*private* String value;
	
	*public* *int* getId() {
		*return* id;
	}
	*public* *void* setId(*int* id) {
		this.id = id;
	}
	*public* String getValue() {
		*return* value;
	}
	*public* *void* setValue(String value) {
		this.value = value;
	}
}




TestManager.java

*public* *class* TestManager {
	*private* Test test;

	*public* Test getTest() {
		*return* test;
	}

	*public* *void* setTest(Test test) {
		this.test = test;
	}
	
	*public* String update() {
		System.out.println(test.getId() + " -- " + test.getValue());
		*return* "success";
	}
}



In my faces-config.xml:

<managed-bean>
 	<managed-bean-name>test</managed-bean-name>
 	<managed-bean-class>TestManager</managed-bean-class>
 	<managed-bean-scope>session</managed-bean-scope>
 </managed-bean>




Now in my jsp file:

<h:form id="testForm">
<h:messages layout="table"/>
<h:panelGrid columns="2">
	<h:outputText value="Id:"/>
	<h:inputText value="#{test.test.id}"/>
	<h:outputText value="Value:"/>
	<h:inputText value="#{test.test.value}"/>
	<h:panelGroup></h:panelGroup>
	<h:panelGroup>
		<h:commandButton value="Submit" action="#{test.update}"/>
	</h:panelGroup>
</h:panelGrid>
</h:form>



--
Regards,

Cuong Hoang

Re: Master-detail design decision

Posted by Sean Schofield <se...@gmail.com>.
Please post these types of questions to the user list.  This list is
for discussing changes to the MyFaces source code only.

Regards,

Sean

On 1/2/06, Cuong Viet Hoang <cl...@gmail.com> wrote:
> Hi all,
>
> I'm pretty new to JSF. In my very first JSF application, I have a class
> called TestManager which contains an object of class Test. Now I have a
> table that renders a list of Test objects. On each row, there is a link to
> edit the current 'Test' object. When the link is clicked, an action method
> is called, which will populate 'test' object in TestManager managed bean
> using the id on the clicked row. Currently, I have to store a TestManager
> managed bean in session scope for the application to work.
>
> I download MyFaces examples and have a look at the master-detail examples. I
> found out that, there are two forms in the example: countryListForm and
> countryForm. But in real life, we'll probably have Country class which
> encapsulate information about country such as country code, name...
> Therefore, countryForm managed bean is kind of repeating that information.
> However, by designing application like this, we don't have to store managed
> bean in session scope.
>
> My question is, which one is the better design?
>
> Test.java
>
> public class Test {
>
> private int id;
>  private String value;
>
>  public int getId()
> {
>  return id;
>  }
>  public void setId(int id)
> {
>  this.id = id;
>  }
>  public String getValue() {
>  return
>  value;
>  }
>  public void setValue(String value) {
>  this.value = value;
>
> }
> }
>
>
>
>
> TestManager.java
> public class TestManager {
>
> private Test test;
>
>  public Test getTest() {
>  return test;
>  }
>
>
> public void setTest(Test test) {
>  this.test = test;
>  }
>
>  public String update()
> {
>  System.out.println(test.getId() + " -- " + test.getValue());
>  return "success";
>
>  }
> }
>
>
>
> In my faces-config.xml:
> <managed-bean>
>  <managed-bean-name>test</managed-bean-name>
>  <managed-bean-class>TestManager</managed-bean-class>
>  <managed-bean-scope>session</managed-bean-scope>
>
>  </managed-bean>
>
>
>
>
> Now in my jsp file:
>
> <h:form id="testForm">
> <h:messages layout="table"/>
> <h:panelGrid columns=
> "2">
>  <h:outputText value="Id:"/>
>  <h:inputText value="#{test.test.id}"
> />
>  <h:outputText value="Value:"/>
>  <h:inputText value="#{test.test.value}"/>
>  <h:panelGroup></h:panelGroup>
>
>  <h:panelGroup>
>  <h:commandButton value="Submit" action="#{test.update}"/>
>  </h:panelGroup>
> </h:panelGrid>
> </h:form>
>
>
>
>
> --
> Regards,
>
> Cuong Hoang