Werner,
Thanks for the reply. I was able to solve the problem by replacing
<f:ajax execute="user-name password" render="out" />
with
<f:ajax execute="user-name password" render=":out" />
In other words, I changed "out" with ":out" and JSF was able to render the out
component
that was placed outside the h:form.
Regards
On 27/06/2010, at 8:08 AM, Werner Punz wrote:
> You need to write following code:
>
> <p><h:outputText id="out" value="#{user.greeting}" /></p>
> <h:form id="form1">
> <h:inputText value="#{user.name}" id="user-name" />
> <p><h:inputSecret value="#{user.password}" id="password"
> /></p>
> <p>
> <h:commandButton value="Login" id="login-button"
> onclick="jsf.ajax.request(this,event,{execute:'form1',
> render:'out'}); return false;"">
>
> </h:commandButton>
> </p>
> </h:form>
> Thats it, but as I said this definitely works for the latest trunk,
> I cannot gurantee that it works on the 2.0.0 code.
>
> Btw. there is theoretically another way you could use render @all in f:ajax
> that would replace the entire body, not really very ajaxy.
>
> Werner
>
>
> Am 26.06.10 03:27, schrieb Bytecode:
>> In other words, I want to make the following code work:
>>
>> |<?xml version="1.0" encoding="ISO-8859-1" ?>
>> <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN"
>> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:h="http://java.sun.com/jsf/html"
>> xmlns:f="http://java.sun.com/jsf/core">
>> <h:head>
>> <title>Welcome</title>
>> </h:head>
>>
>> <h:body>
>> <p><h:outputText id="out" value="#{user.greeting}" /></p>
>> <h:form id="form1">
>> <h:inputText value="#{user.name}" id="user-name" />
>> <p><h:inputSecret value="#{user.password}" id="password"
>> /></p>
>> <p>
>> <h:commandButton value="Login" id="login-button">
>> <f:ajax execute="user-name password" render="out" />
>> </h:commandButton>
>> </p>
>> </h:form>
>> </h:body>
>>
>> </html>|
>>
>>
>> On 26 Jun, 2010,at 05:13 AM, Werner Punz <[email protected]> wrote:
>>
>>> Yes you can use the direct javascript api jsf.ajax.request instead of
>>> ajax then you can use full identifiers.
>>>
>>> <h:commandButton value="Login" id="login-button">
>>> > <f:ajax execute="user-name password" render="out" />
>>> > </h:commandButton>
>>> would become
>>>
>>> <h:commandButton value="Login" id="login-button"
>>> onclick="jsf.ajax.request(this,event,{execute:'@this',
>>> render:'form1:out'});return false;">
>>> </h:commandButton>
>>>
>>> As you can see the render now is mapped to the full client identifier
>>> form1:out
>>>
>>> That way you can make render submits outside of your form.
>>>
>>> However, I have to recommend to update to the latest trunk or the soon
>>> hopefully to be released myfaces 2.0.1 if you want to do cross form
>>> submits or submits with renders outside of your current form.
>>>
>>> I did a load of improvement especially in this area for the scripts so
>>> that cases like updating a cross form element does not cause problems
>>> anymore with other forms where the element might be embedded or which
>>> has another form embedded :-)
>>>
>>> Here is a code snippet from one of my testing cases dealing exactly with
>>> what you want to achieve:
>>>
>>> http://www.pastebin.org/358867
>>>
>>> Have in mind that all this works in the current trunk (and soon in
>>> 2.0.1), but the 2.0.0 codebase and also Mojarra has some limitations.
>>> (mostly if you update elements which embed forms, or in case of MyFaces
>>> 2.0.0 also if you update elements within another form than the issuing
>>> one)
>>>
>>>
>>>
>>> Werner
>>>
>>>
>>> Am 25.06.10 18:06, schrieb Bytecode:
>>> > Is there a way to make the following code work, apart from placing the
>>> > "#out" component inside the h:form element?
>>> >
>>> > |<?xml version="1.0" encoding="ISO-8859-1" ?>
>>> > <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 10 Transitional//EN"
>>> > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>>> <http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">>;
>>> > <html xmlns="http://www.w3.org/1999/xhtml"
>>> > xmlns:h="http://java.sun.com/jsf/html"
>>> > xmlns:f="http://java.sun.com/jsf/core">
>>> <http://java.sun.com/jsf/core">>;
>>> > <h:head>
>>> > <title>Welcome</title>
>>> > </h:head>
>>> >
>>> > <h:body>
>>> >
>>> > <h:form id="form1">
>>> >
>>> > <p><h:outputText id="out" value="#{user.greeting}" /></p>
>>> >
>>> > <h:inputText value="#{user.name}" id="user-name" />
>>> > <p><h:inputSecret value="#{user.password}" id="password" /></p>
>>> > <p>
>>> > <h:commandButton value="Login" id="login-button">
>>> > <f:ajax execute="user-name password" render="out" />
>>> > </h:commandButton>
>>> > </p>
>>> > </h:form>
>>> > </h:body>
>>> >
>>> > </html>
>>> > |
>>> >
>>> >
>>> >
>>> > At the moment the following exception is thrown by JSF when rendering
>>> > the page:
>>> >
>>> > |<f:ajax> contains an unknown id'out' - cannot locate it in the
>>> context of the component login-button|
>>>
>>>
>
>