私は非常に単純な JSF 2.0 アプリケーションを持っています (以下を参照)。問題は、ui:repeat
が存在する場合、実行順序 (デバッガーでブレークポイントを使用して確認します) がおかしいことです。
フォームを送信した後、 のSecondBean.initSomething()
前に呼び出されFirstBean.setFirstFormField()
ます。のタイプをsomething
toに変更し、 fromString
を削除ui:repeat
しindex.jsf
て使用するとh:outputText
、すべてが期待どおりに機能し、FirstBean.setFirstFormField()
before が呼び出されSecondBean.initSomething()
ます。
私が間違っていることは何ですか?
JDeveloper Studio Edition 11.1.2.2.0 とそのスタック (WebLogic 10.3.5.0、Java 6 および JSF 2.0) を使用しています。
コードは次のとおりです。
index.jsf:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<html xmlns="http://www.w3.org/1999/xhtml">
<h:head></h:head>
<h:body>
<h:form>
<h:panelGrid columns="1">
<h:inputText value="#{firstBean.firstFormField}" />
<h:commandButton action="#{firstBean.processForm}" value="Submit" />
</h:panelGrid>
</h:form>
<ui:repeat value="#{secondBean.something}" var="variable" >
<h:outputText value="#{variable}" />
</ui:repeat>
</h:body>
</html>
</f:view>
FirstBean.java:
package test.backing;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;
@ManagedBean
@RequestScoped
public class FirstBean {
private String firstFormField;
public FirstBean() {
super();
}
public String processForm() {
FacesContext facesContext;
facesContext = FacesContext.getCurrentInstance();
return facesContext.getViewRoot().getViewId();
}
public void setFirstFormField(String firstFormField) {
this.firstFormField = firstFormField;
}
public String getFirstFormField() {
return this.firstFormField;
}
}
SecondBean.java:
package test.backing;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.faces.bean.*;
@ManagedBean
@RequestScoped
public class SecondBean {
private List<String> something;
public SecondBean() {
}
@PostConstruct
public void initSomething() {
this.something = Arrays.asList("abc", "cde");
}
public void setSomething(List<String> something) {
this.something = something;
}
public List<String> getSomething() {
return this.something;
}
}
顔-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee">
</faces-config>
web.xml:
<?xml version = '1.0' encoding = 'UTF-8'?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
<param-value>*.jsf;*.xhtml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>