I will try to explain the problem with code snippet
Here is the code snippet
{code}
<html>
<body>
<f:view>
<h:form id="updateDeviceForm">
<h:panelGrid>
..........
..........
<h:inputText id="deviceName" value="#{deviceBean.name}" style="width: 230px"
styleClass="required max-63" >
</h:panelGrid>
<h:panelGrid>
<ui:include src="fqdnForm.xhtml"></ui:include>
</h:panelGrid>
</f:view>
</body>
</html>
{code}
Here is the snippet of fqdnForm.xhmtl which has value binding of name form
field to model object Fqdn
{code}
<body>
<h:panelGrid columns="3" styleClass="detail" columnClasses="label">
<h:inputText id="hostName" value="#{fqdnBean.fqdn. name}" style="width:
230px"
styleClass="required max-63" >
</h:inputText>
<h:inputHidden id="fqdnHidden" value="#{fqdnBean.fqdn}"
converter="#{fqdnConverter}"></h:inputHidden>
</h:panelGrid>
</body>
{code}
I am unable to access Model object "Fqdn" In DeviceBean. It returns null
when i access it thru FacesContext . Here is the snippet
{code}
FqdnBean fqdnBean = (FqdnBean)
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("fqdnBean");
Fqdn fqdnVO = fqdnBean.createValueBindingFqdn();
{code}
Then i tried to access Model object "Fqdn" In DeviceBean by component Id
iterating from viewroot.Here is the snippet
{code}
// Retrieving UIComponent from Tree Model
UIInput fqdnComp = (UIInput) FacesUtils.findComponentById(null,
"fqdnHidden");
Fqdn fqdnVO = (Fqdn) fqdnComp.getValue();
{code}
As the above techniques fails i cant think of any other method. or not sure
what i am making wrong. I dont want to inject FqdnBean into DeviceBean as
managed property as i think the best & effiecient way to access component is
from TreeModel i.e. findComponentById. Here is the snippet
{code}
/**
* Searches view for the component with a specified ID
*
* @param root
* @param id
* @return
*/
@SuppressWarnings("unchecked")
public static UIComponent findComponentById(UIComponent root, String id)
{
if (root == null)
{
// start from the top
root = FacesContext.getCurrentInstance().getViewRoot();
}
UIComponent comp = root.findComponent(id);
if (comp == null)
{
// try to see if there are any nested forms and repeat process
Iterator<UIComponent> iter = root.getFacetsAndChildren();
while (iter.hasNext())
{
UIComponent item = iter.next();
if (HtmlForm.class.isInstance(item))
{
comp = findComponentById(item, id);
if (comp != null)
{
logger.debug("Found component in form:" + item);
break;
}
}
}
}
return comp;
}
{code}
Oliver Becker wrote:
>
> Hi,
> I'm not sure if I fully understand what you're trying to achieve.
> However, here are some suggestions:
>
> 1. If you want to access one managed bean from another (here for
> example fqdnBean from deviceBean) then you should simply declare
> fqdnBean as a managed property for deviceBean. It is completely
> irrelevant (or independent from the fact) that fqdnForm.xhtml is
> included in deviceForm.xhtml.
>
> 2. Are you aware that your included fqdnForm.xhtml defines another
> HTML body? This results in nested body elements in deviceForm which is
> illegal HTML.
>
> 3. I can only guess what the h:inputHidden is for. If you try to save
> the fqdn object to the next request then t:saveState is your friend.
> This element should be placed before any other access to fqdnBean.fqdn
> (particularly before the h:inputText).
>
> Hope this helps,
> Oliver
>
>
> You wrote:
>
>>
>> Here is the code sample
>>
>> <html>
>>
>> <body>
>>
>> <f:view>
>>
>> <h:form id="updateDeviceForm">
>>
>> <h:panelGrid>
>>
>> ..........
>>
>> ..........
>>
>> <h:inputText id="deviceName" value="#{deviceBean.name}"
>> style="width: 230px"
>>
>> styleClass="required max-63" >
>>
>>
>> </h:panelGrid>
>>
>>
>>
>> <h:panelGrid>
>>
>> <ui:include src="fqdnForm.xhtml"></ui:include>
>>
>> </h:panelGrid>
>>
>> </f:view>
>>
>> </body>
>>
>> </html>
>>
>>
>>
>> Here is the snippet of fqdnForm.xhmtl which has value binding of
>> name form
>> field to model object Fqdn
>>
>>
>>
>> <body>
>>
>> <h:panelGrid columns="3" styleClass="detail" columnClasses="label">
>>
>> <h:inputText id="hostName" value="#{fqdnBean.fqdn. name}"
>> style="width:
>> 230px"
>>
>> styleClass="required max-63" >
>>
>> </h:inputText>
>>
>> <h:inputHidden id="fqdnHidden" value="#{fqdnBean.fqdn}"
>> converter="#{fqdnConverter}"></h:inputHidden>
>>
>> </h:panelGrid>
>>
>> </body>
>>
>>
>> The problem is i am unable to access model object fqdn in deviceBean
>> and
>> ofcourse quite obviously i am able to successfully access Fqdn model
>> object
>> in FqdnBean.
>>
>> But as fqdnForm is included in deviceForm i am accessing Fqdn model
>> object
>> or FqdnBean in deviceBean as follows and it returns NULL
>> 1)
>>
>> FqdnBean fqdnBean = (FqdnBean)
>> FacesContext
>> .getCurrentInstance
>> ().getExternalContext().getRequestMap().get("fqdnBean");
>>
>> 2)UIInput fqdnComp = (UIInput) FacesUtils.findComponentById(null,
>> "fqdnHidden");
>>
>>
>> Any pointers/suggestions will be highly appreciated
>> --
>> View this message in context:
>> http://www.nabble.com/JSF-Value-Binding-to-Model-Object-doesnt-work-tp16785936p16785936.html
>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>
>
>
>
--
View this message in context:
http://www.nabble.com/JSF-Value-Binding-to-Model-Object-doesnt-work-tp16785936p16798630.html
Sent from the MyFaces - Users mailing list archive at Nabble.com.