Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
JSFbean生命周期-如何存储请求属性_Jsf - Fatal编程技术网

JSFbean生命周期-如何存储请求属性

JSFbean生命周期-如何存储请求属性,jsf,Jsf,因此,我有以下jsf页面(工作): My faces-config.xml类似于: <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>show_project</from-outcome> <to-view-id>/project.xhtml</to-view-id>

因此,我有以下jsf页面(工作):

My faces-config.xml类似于:

<navigation-rule>
  <from-view-id>*</from-view-id>
  <navigation-case>
    <from-outcome>show_project</from-outcome>
    <to-view-id>/project.xhtml</to-view-id>
    <redirect/>
  </navigation-case>
</navigation-rule>

*
show_项目
/project.xhtml
这一切都可以工作,除了ProjectController的projectId在调用openProject(调用openProject并在控制台中显示正确的id)和呈现页面之间丢失,页面在呈现页面时执行一些链接35;{ProjectController.getProjectId},因为这返回null

如何在呈现页面之前保留bean中的值?我尝试了一些@SessionScope、@RequestScope之类的东西,但坦率地说,我不理解JFS生命周期的完整扩展


为了提供更多信息,我使用JBoss AS 7.2和PrimeFaces 3.4.2来解决您的具体问题,即(老式的)导航案例指定了重定向。重定向基本上指示客户机在给定资源上发送一个全新的HTTP请求。您已设置属性的初始请求已为此被丢弃

我不确定您的具体功能需求是什么,因此很难提出正确的解决方案来实现这一点。一种方法是从导航案例中删除
条目。另一种方法是在目标页面中使用带有
的普通链接来设置/转换它(这会立即提高书签功能,从而提高SEO和UX)。另一种方法是使用闪光灯

另见:
  • -了解重定向和导航/转发之间的区别
  • -了解要选择的范围
  • -查看f:param/f:viewParam方法的具体示例

至于您的具体问题,那个(老式的)导航案例指定了重定向。重定向基本上指示客户机在给定资源上发送一个全新的HTTP请求。您已设置属性的初始请求已为此被丢弃

我不确定您的具体功能需求是什么,因此很难提出正确的解决方案来实现这一点。一种方法是从导航案例中删除
条目。另一种方法是在目标页面中使用带有
的普通链接来设置/转换它(这会立即提高书签功能,从而提高SEO和UX)。另一种方法是使用闪光灯

另见:
  • -了解重定向和导航/转发之间的区别
  • -了解要选择的范围
  • -查看f:param/f:viewParam方法的具体示例

谢谢您的回复。删除
无效。projectId仍然为空(在设置了is之后)。
的目的是强制更改浏览器窗口中的URL。我将尝试
解决方案并在稍后进行评论。然后,在目前提供的代码/信息中,还没有发现问题的另一个原因。也许你管理豆子的方式不好?打开sane JSF教程的第一章,创建一个“Hello World”。正是这种情况通常在普通的JSF Hello World中得到演示。正如您所说的“老式的”-我尝试了几个教程,但没有一个与现代方法兼容:(所以我找到了解决方案。除了删除
,我还添加了
@RequestScoped
。谢谢。我想我会再次搜索更好的教程。停止阅读JSF 1.x资源,转到JSF 2.x资源。注意上面提到的版本。JSF 1.x和2.x就像白天和黑夜一样。谢谢你的回答。删除
不起作用。项目ID仍然为空(在设置is之后)。使用
的目的是强制在浏览器窗口中更改URL。我将尝试
解决方案,稍后进行评论。然后,在目前提供的代码/信息中还没有发现问题的另一个原因。也许您管理bean的方式不好?只需打开sane JSF教程的第一章,创建e“Hello World”。这个例子通常在一般的JSF Hello World中演示。正如您所说的“老式”-我尝试了几个教程,但似乎没有一个适合现代方法:(因此,我找到了解决方案。除了删除
,我还添加了
@RequestScoped
。谢谢。我想我会再次搜索更好的教程。停止阅读JSF 1.x资源,转到JSF 2.x资源。注意上面提到的版本。JSF 1.x和2.x就像白天和黑夜一样。
@Named
public class ProjectController{

  private Integer projectId;

  public String openProject(Integer projectId){
    // this works, System.out.println shows correct setting
    this.projectId = projectId;

    // now redirect to correct jsf page via faces-config.xml
    return "show_project";
  }

  // this is called by the jsf page to be shown
  public Integer getProjectId(){
    // this is null :(
    return this.projectId;
  }  

}
<navigation-rule>
  <from-view-id>*</from-view-id>
  <navigation-case>
    <from-outcome>show_project</from-outcome>
    <to-view-id>/project.xhtml</to-view-id>
    <redirect/>
  </navigation-case>
</navigation-rule>