Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java <;用户界面:重复>;在JSF2.0中,打破了方法的执行顺序_Java_Jsf_Jsf 2 - Fatal编程技术网

Java <;用户界面:重复>;在JSF2.0中,打破了方法的执行顺序

Java <;用户界面:重复>;在JSF2.0中,打破了方法的执行顺序,java,jsf,jsf-2,Java,Jsf,Jsf 2,我有一个非常简单的JSF2.0应用程序(见下文)。问题是,当出现ui:repeat时,执行顺序(我在调试器中使用断点检查)是奇怪的 在我提交表单之后,SecondBean.initSomething()在FirstBean.setFirstFormField()之前被调用。如果我将something的类型更改为String,并从index.jsf中删除ui:repeat,然后只使用h:outputText,那么一切都会按预期工作,FirstBean.setFirstFormField()在Sec

我有一个非常简单的JSF2.0应用程序(见下文)。问题是,当出现
ui:repeat
时,执行顺序(我在调试器中使用断点检查)是奇怪的

在我提交表单之后,
SecondBean.initSomething()
FirstBean.setFirstFormField()之前被调用。如果我将
something
的类型更改为
String
,并从
index.jsf
中删除
ui:repeat
,然后只使用
h:outputText
,那么一切都会按预期工作,
FirstBean.setFirstFormField()
SecondBean.initSomething()之前被调用

我做错了什么

我正在使用JDeveloperStudio Edition 11.1.2.2.0及其堆栈(WebLogic10.3.5.0、Java6和JSF2.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>
SecondBean.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;
    }
}
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;
    }
}
package test.backing;
导入java.util.*;
导入javax.annotation.PostConstruct;
导入javax.faces.bean.*;
@ManagedBean
@请求范围
公共类SecondBean{
私人物品清单;
公共bean(){
}
@施工后
公共物品{
this.something=Arrays.asList(“abc”、“cde”);
}
公共无效设置某物(列出某物){
这个,某物,某物;
}
公共列表getSomething(){
归还这个东西;
}
}
faces-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>

javax.faces.FACELETS\u视图\u映射
*.jsf;*。xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
/面孔/*
我做错了什么

没什么。它按规定工作。它只是在恢复视图时调用的

如果这给您带来了一个特定的问题,不幸的是问题中根本没有详细描述,那么需要从不同的方向寻找解决方案,而不是依赖于bean构造或getter调用相对于视图的特定执行顺序。至少,出于某种原因,这是你的目标


与具体问题无关,在
processForm()
操作方法中,您也可以返回
null
以导航回当前视图。这比目前笨拙的方法简单得多

我做错了什么

没什么。它按规定工作。它只是在恢复视图时调用的

如果这给您带来了一个特定的问题,不幸的是问题中根本没有详细描述,那么需要从不同的方向寻找解决方案,而不是依赖于bean构造或getter调用相对于视图的特定执行顺序。至少,出于某种原因,这是你的目标



与具体问题无关,在
processForm()
操作方法中,您也可以返回
null
以导航回当前视图。这比当前笨拙的方法简单得多。

这就是JSF循环的工作原理。顺序是正确的

您需要根据JSF框架的规则改变您的工作方式。
了解JSF周期的各个阶段,这可能会对您有所帮助。

这就是JSF周期的工作方式。顺序是正确的

您需要根据JSF框架的规则改变您的工作方式。
了解JSF周期的各个阶段,这可能会对您有所帮助。

您可以使用h:dataTable。它在恢复阶段不填充值,在更新模型之后填充值。pahse

您可以使用h:dataTable。它在恢复阶段不填充值,在updateModel pahse

之后,它填充了

我的猜测是,
ui:repeat
,作为Facelets的一部分(我猜不是一个“真正的”JSF组件),在处理的早期阶段进行评估,而不是
h:inputText
h:outputText
。(还原视图与应用请求值或更新模型值)我已经有一段时间没有接触JSF了。我的猜测是,
ui:repeat
,作为Facelets的一部分(我猜不是“真正的”JSF组件),在处理的早期阶段比
h:inputText
h:outputText
进行评估。(还原视图与应用请求值或更新模型值)但是我已经有一段时间没有接触JSF了。请注意,OP的特定问题与您在当前的最后一个问题中提出的问题无关。仅仅因为你觉得“冒犯性”就否决技术上有效的答案也毫无意义。也许您应该接受这样一个事实,即您根本不了解基本HTTP在其核心中是如何工作的,以及JSF是如何将其(太多)抽象出来的?请注意,OP的特定问题与您当前在上一个问题中所问的您自己的问题无关。仅仅因为你觉得“冒犯性”就否决技术上有效的答案也毫无意义。也许您应该接受这样一个事实,即您根本不了解基本HTTP在其核心中是如何工作的,以及JSF是如何将其(太多)抽象出来的?