JSF required field update
От: DoubleD  
Дата: 12.12.08 09:13
Оценка:
<h:form>
<h:inputText value="#{userAddBean.newPassword}" required="true" id="userPassword">
</h:inputText>
<h:commandLink actionListener="#{userAddBean.passGenListen}" immediate="true">
<h:graphicImage value="../images/password.png" styleClass="commandImage"/>
</h:commandLink>
</h:from>


public void passGenListen(ActionEvent e){
        newPassword = PasswordGenerator.generate(8);
        
    }


Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.
Re: JSF required field update
От: ne_vazhno  
Дата: 12.12.08 09:25
Оценка:
Здравствуйте, DoubleD, Вы писали:

DD><h:form>

DD><h:inputText value="#{userAddBean.newPassword}" required="true" id="userPassword">
DD></h:inputText>
DD><h:commandLink actionListener="#{userAddBean.passGenListen}" immediate="true">
DD> <h:graphicImage value="../images/password.png" styleClass="commandImage"/>
DD></h:commandLink>
DD></h:from>


DD>
DD>public void passGenListen(ActionEvent e){
DD>        newPassword = PasswordGenerator.generate(8);
        
DD>    }
DD>


DD>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.



А вы уберите immediate="true" в h:commandLink
Re[2]: JSF required field update
От: DoubleD  
Дата: 12.12.08 09:29
Оценка:
Здравствуйте, ne_vazhno, Вы писали:

_>Здравствуйте, DoubleD, Вы писали:


DD>><h:form>

DD>><h:inputText value="#{userAddBean.newPassword}" required="true" id="userPassword">
DD>></h:inputText>
DD>><h:commandLink actionListener="#{userAddBean.passGenListen}" immediate="true">
DD>> <h:graphicImage value="../images/password.png" styleClass="commandImage"/>
DD>></h:commandLink>
DD>></h:from>


DD>>
DD>>public void passGenListen(ActionEvent e){
DD>>        newPassword = PasswordGenerator.generate(8);
        
DD>>    }
DD>>


DD>>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.



_>А вы уберите immediate="true" в h:commandLink


не будет проходить валидацию при пустом поле(required="true")
Re: JSF required field update
От: Passer  
Дата: 12.12.08 09:38
Оценка:
DD>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.
а какое значение у поля managed-bean-scope в faces-config.xml. случайно не session??
Re[3]: JSF required field update
От: stenkil  
Дата: 12.12.08 09:44
Оценка:
Здравствуйте, DoubleD, Вы писали:

DD>>>
DD>>>public void passGenListen(ActionEvent e){
DD>>>        newPassword = PasswordGenerator.generate(8);
        
DD>>>    }
DD>>>


DD>>>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.


DD>не будет проходить валидацию при пустом поле(required="true")


После обработки слушателем при установленом immediate=true сразу идет переход в фазу формирование ответа renderResponse, соответственно и не осуществляется рендер вашего поля. Есть варианты или поменять логику или когда то заставлял перерисовывать страницу:
  FacesContext fc = FacesContext.getCurrentInstance();
  fc.getApplication().getNavigationHandler().handleNavigation(fc, null, null);

но сильно уж не нравится такой способ
Re[4]: JSF required field update
От: stenkil  
Дата: 12.12.08 09:53
Оценка:
Здравствуйте, stenkil, Вы писали:

S>
S>  FacesContext fc = FacesContext.getCurrentInstance();
S>  fc.getApplication().getNavigationHandler().handleNavigation(fc, null, null);
S>

S>но сильно уж не нравится такой способ

Более правильным кажется
  FacesContext fc = FacesContext.getCurrentInstance();
  String viewId = fc.getViewRoot().getViewId();
  fc.getApplication().getViewHandler().createView(fc, viewId);

но не было повода проверить
Re[2]: JSF required field update
От: DoubleD  
Дата: 12.12.08 10:01
Оценка:
Здравствуйте, Passer, Вы писали:


DD>>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.

P>а какое значение у поля managed-bean-scope в faces-config.xml. случайно не session??

да, а что?
Re[4]: JSF required field update
От: Sergey Astakhov Россия  
Дата: 12.12.08 10:06
Оценка:
Здравствуйте, stenkil, Вы писали:

S>Здравствуйте, DoubleD, Вы писали:


DD>>>>
DD>>>>public void passGenListen(ActionEvent e){
DD>>>>        newPassword = PasswordGenerator.generate(8);
        
DD>>>>    }
DD>>>>


DD>>>>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.


DD>>не будет проходить валидацию при пустом поле(required="true")


S>После обработки слушателем при установленом immediate=true сразу идет переход в фазу формирование ответа renderResponse, соответственно и не осуществляется рендер вашего поля.


Дык renderResponse же всю страницу заново формирует, в том числе и поле.
Другое дело, если какой-нибудь AJAX-фреймворк используется, но в них обычно можно отдельно задать компонент для обновления

S> Есть варианты или поменять логику или когда то заставлял перерисовывать страницу:

S>
S>  FacesContext fc = FacesContext.getCurrentInstance();
S>  fc.getApplication().getNavigationHandler().handleNavigation(fc, null, null);
S>

S>но сильно уж не нравится такой способ

ИМХО, эти хаки тут совершенно не к чему.
Re[5]: JSF required field update
От: DoubleD  
Дата: 12.12.08 10:23
Оценка:
Здравствуйте, Sergey Astakhov, Вы писали:

SA>Здравствуйте, stenkil, Вы писали:


S>>Здравствуйте, DoubleD, Вы писали:


DD>>>>>
DD>>>>>public void passGenListen(ActionEvent e){
DD>>>>>        newPassword = PasswordGenerator.generate(8);
        
DD>>>>>    }
DD>>>>>


DD>>>>>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.


DD>>>не будет проходить валидацию при пустом поле(required="true")


S>>После обработки слушателем при установленом immediate=true сразу идет переход в фазу формирование ответа renderResponse, соответственно и не осуществляется рендер вашего поля.


SA>Дык renderResponse же всю страницу заново формирует, в том числе и поле.

SA>Другое дело, если какой-нибудь AJAX-фреймворк используется, но в них обычно можно отдельно задать компонент для обновления

S>> Есть варианты или поменять логику или когда то заставлял перерисовывать страницу:

S>>
S>>  FacesContext fc = FacesContext.getCurrentInstance();
S>>  fc.getApplication().getNavigationHandler().handleNavigation(fc, null, null);
S>>

S>>но сильно уж не нравится такой способ

SA>ИМХО, эти хаки тут совершенно не к чему.



Используется Richfaces a4j. Пробовал :

<h:form>
<h:inputText value="#{userAddBean.newPassword}" required="true" id="userPassword">
</h:inputText>
<a4j:commandLink actionListener="#{userAddBean.passGenListen}" reRender="userPassword" ajaxSingle="true">
<h:graphicImage value="../images/password.png" styleClass="commandImage"/>
</a4j:commandLink>
</h:from>

не помогает
Re[3]: JSF required field update
От: Passer  
Дата: 12.12.08 10:35
Оценка:
Здравствуйте, DoubleD, Вы писали:


DD>да, а что?

ставим
<managed-bean-scope>request</managed-bean-scope>
и все работает.
Re[5]: JSF required field update
От: stenkil  
Дата: 12.12.08 10:48
Оценка:
Здравствуйте, Sergey Astakhov, Вы писали:

SA>ИМХО, эти хаки тут совершенно не к чему.

Согласен

SA>Дык renderResponse же всю страницу заново формирует, в том числе и поле.

SA>Другое дело, если какой-нибудь AJAX-фреймворк используется, но в них обычно можно отдельно задать компонент для обновления
Trinidad. partialTriggers точно не спасал.

Проверил на чистом JSF
public class TestBean {
    private String text = "test text";
    public TestBean() {
    }
    public String getTextInput(){
        return "test text";
    }
    public void setTextInput(String text){
        this.text = text;
    }
}
    <body>
    <h:form>
        <h:inputText value="#{testBean.textInput}" required="true"/>
        <h:commandButton value="commandButton1" immediate="true"/>
      </h:form>
      </body>

Поставил точки останова, дебагер показывает, что в метод getTextInput() попадаю только при 1-м развертывании страницы. При нажатии на баттон не попадаю ни в один из методов бина.
И почему я должен был в них попасть, прошла фаза restory view, apply request value и на render response пошли выдавать дерево, обновление значений проскочили.
Re[4]: JSF required field update
От: stenkil  
Дата: 12.12.08 11:07
Оценка:
Здравствуйте, Passer, Вы писали:

DD>>да, а что?

P>ставим
P><managed-bean-scope>request</managed-bean-scope>
P>и все работает.
Странно, в примере ниже я поменял scope на request, должен получать константу а висит измененный текст ?
FireFox, контейнер OC4J, а у вас ?
Re[5]: JSF required field update
От: Passer  
Дата: 12.12.08 11:30
Оценка:
Здравствуйте, stenkil, Вы писали:

S>Странно, в примере ниже я поменял scope на request, должен получать константу а висит измененный текст ?


не совсем понял вопроса. где "пример ниже"??
Re[6]: JSF required field update
От: Passer  
Дата: 12.12.08 11:34
Оценка:
если вы говорите об этом примере.

S>
S>public class TestBean {
S>    private String text = "test text";
S>    public TestBean() {
S>    }
S>    public String getTextInput(){
S>        return "test text";
S>    }
S>    public void setTextInput(String text){
S>        this.text = text;
S>    }
S>}
S>    <body>
S>    <h:form>
S>        <h:inputText value="#{testBean.textInput}" required="true"/>
S>        <h:commandButton value="commandButton1" immediate="true"/>
S>      </h:form>
S>      </body>
S>


то:
сначало text="test text";
потом в него записывается значения взятое из input.
а потом при выводе страницы на экран значение этого поля звписывается обратно в input.
Re[7]: JSF required field update
От: stenkil  
Дата: 12.12.08 11:45
Оценка:
Здравствуйте, Passer, Вы писали:

P>если вы говорите об этом примере.


S>>
S>>public class TestBean {
S>>    private String text = "test text";
S>>    public TestBean() {
S>>    }
S>>    public String getTextInput(){
S>>        return "test text";
S>>    }
S>>    public void setTextInput(String text){
S>>        this.text = text;
S>>    }
S>>}
S>>    <body>
S>>    <h:form>
S>>        <h:inputText value="#{testBean.textInput}" required="true"/>
S>>        <h:commandButton value="commandButton1" immediate="true"/>
S>>      </h:form>
S>>      </body>
S>>


P>сначало text="test text";

P>потом в него записывается значения взятое из input.
P>а потом при выводе страницы на экран значение этого поля звписывается обратно в input.

Только возвращаю я всегда константу "test text" из getTextInput()
Re[8]: JSF required field update
От: Passer  
Дата: 12.12.08 12:07
Оценка:
Здравствуйте, stenkil, Вы писали:

S>Только возвращаю я всегда константу "test text" из getTextInput()


ой сори. не заметил. но попробовал у себя. и нормально работает.если нужно скину готовый проект в котором то что вы написал работает.
Re[9]: JSF required field update
От: stenkil  
Дата: 12.12.08 12:15
Оценка:
Здравствуйте, Passer, Вы писали:

P>ой сори. не заметил. но попробовал у себя. и нормально работает.если нужно скину готовый проект в котором то что вы написал работает.


Окружение какое, я у себя хочу проверить, что не так
Re[10]: JSF required field update
От: Passer  
Дата: 12.12.08 12:31
Оценка:
Здравствуйте, stenkil, Вы писали:

S>Окружение какое, я у себя хочу проверить, что не так


tomcat5. ничего особенного не делал.
jsp файл
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="jsfks.bundle.messages" var="msg"/>

<html>
 <body>
   <f:view>
     <h1>
      <h:outputText value="#{msg.inputname_header}"/>
     </h1>
     <h:form id="helloForm">
      <h:outputText value="#{msg.prompt}"/>
      <h:inputText value="#{personBean.personName}" />
      <h:commandButton action="greeting" value="#{msg.button_text}" />
     </h:form>
   </f:view>
 </body>
</html>



java file
package jsfks;

public class PersonBean {

   String personName;
    
   /**
   * @return Person Name
   */
   public String getPersonName() {
      return "--";
   }

   /**
   * @param Person Name
   */
   public void setPersonName(String name) {
      personName = name;
   }
}



faces-config.xml
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
    <managed-bean>
      <managed-bean-name>personBean</managed-bean-name>
      <managed-bean-class>jsfks.PersonBean</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

</faces-config>



web.xml
<?xml version="1.0"?> 
<!DOCTYPE web-app PUBLIC 
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
  "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
    <!-- Faces Servlet -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup> 1 </load-on-startup>
    </servlet>


    <!-- Faces Servlet Mapping -->
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    
</web-app>
Re[11]: JSF required field update
От: stenkil  
Дата: 12.12.08 12:40
Оценка:
Здравствуйте, Passer, Вы писали:

P><html>

P> <body>
P> <f:view>
P> <h1>
P> <h:outputText value="#{msg.inputname_header}"/>
P> </h1>
P> <h:form id="helloForm">
P> <h:outputText value="#{msg.prompt}"/>
P> <h:inputText value="#{personBean.personName}" />
P> <h:commandButton action="greeting" value="#{msg.button_text}" />
P> </h:form>
P> </f:view>
P> </body>
P></html>
P>[/java]

Ссори, а где immediate = true ?
Re[11]: JSF required field update
От: stenkil  
Дата: 12.12.08 12:54
Оценка:
Здравствуйте, Passer, Вы писали:

P> <h:commandButton action="greeting" value="#{msg.button_text}" />


И кстати в исходной задаче стоял listener, потому что action эквивалент тому что я писал
  FacesContext fc = FacesContext.getCurrentInstance();
  fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "greeting");

если в тебя прописано это outcome в navigation-rule, то все будет ок.
Re: JSF required field update
От: sergey321  
Дата: 12.12.08 13:29
Оценка: 1 (1)
Здравствуйте, DoubleD, Вы писали:

DD><h:form>

DD><h:inputText value="#{userAddBean.newPassword}" required="true" id="userPassword">
DD></h:inputText>
DD><h:commandLink actionListener="#{userAddBean.passGenListen}" immediate="true">
DD> <h:graphicImage value="../images/password.png" styleClass="commandImage"/>
DD></h:commandLink>
DD></h:from>


DD>
DD>public void passGenListen(ActionEvent e){
DD>        newPassword = PasswordGenerator.generate(8);
        
DD>    }
DD>


DD>Почему не обновляется поле userPassword? Если обновить страницу на F5, то обновляется.


Не читал две ветки выше, но вот подробное описание проблемы: http://forums.sun.com/thread.jspa?threadID=583466
Re[12]: JSF required field update
От: Passer  
Дата: 12.12.08 13:35
Оценка:
Здравствуйте, stenkil, Вы писали:


S>Ссори, а где immediate = true ?

ой. да. все попутал. сори.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.