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
Validation JSF-强制UIInput组件刷新_Validation_Jsf_Refresh_Lifecycle - Fatal编程技术网

Validation JSF-强制UIInput组件刷新

Validation JSF-强制UIInput组件刷新,validation,jsf,refresh,lifecycle,Validation,Jsf,Refresh,Lifecycle,我目前正在从事一个JSF1.2项目(IBM实现和“公司层”) 问题 这里的情况(项目数量仅为示例),简单的CRUD 列表项 我有一份物品清单 我单击项目2查看详细信息 我点击修改,修改页面显示项目2的值 使用按钮“后退”和immediate=“true”(因为我们不想提交修改)返回列表 项目4的详情 修改项目4>显示项目2的值 但是 如果我将“后退”按钮的“立即”属性设置为false,则第4项的值正常 如果我将inputText组件的“禁用”属性设置为true,则第4项的值可以 如果我使用(U

我目前正在从事一个JSF1.2项目(IBM实现和“公司层”)

问题 这里的情况(项目数量仅为示例),简单的CRUD

  • 列表项
  • 我有一份物品清单
  • 我单击项目2查看详细信息
  • 我点击修改,修改页面显示项目2的值
  • 使用按钮“后退”和
    immediate=“true”
    (因为我们不想提交修改)返回列表
  • 项目4的详情
  • 修改项目4>显示项目2的值
  • 但是
    • 如果我将“后退”按钮的“立即”属性设置为
      false
      ,则第4项的值正常
    • 如果我将inputText组件的“禁用”属性设置为
      true
      ,则第4项的值可以
    • 如果我使用
      (UIInput)
    另外,我在调试模式中检查了我想要显示的bean是“item4”,它是

    我发现了什么 在对Google进行了一些研究之后,我发现这个问题来自于,尽管找到的文档和解决方案是针对JSF的特定实现的。 所以我猜这是因为该值填充了“localValue”而不是“submittedValue”(@see可能有助于理解),并且这些页面中有一些解决方案

    结果 它不起作用(我发誓我不会在这里)。 “刷新”解决方案无效。 “擦除输入”很可怕。我不能承认我需要引用每个输入字段!另外,我在IBM JSF中的UIInput上没有找到
    setSubmittedValue()
    方法。 “清晰”的方法是无效的。我用这段代码尝试了一个元素和完整的组件树

    public void cleanAllChildren(List<UIComponentBase> list){
     for(UIComponentBase c : list){
      this.cleanAllChildren(c.getChildren());
      c.getChildren().clear();
     }
    }
    
    public void cleanalchildren(列表){
    用于(UIComponentBase c:列表){
    this.cleanalchildren(c.getChildren());
    c、 getChildren().clear();
    }
    }
    
    但是没有成功。我来了。
    我错过什么了吗?有没有一个我没有看到的巧妙的解决方案?我不太熟悉JSF的生命周期。

    将包含请求范围数据的bean放在请求范围内,而不是会话范围内


    您可能需要在会话中“保存”DB调用的整个列表,以及在同一会话中的后续请求中保留值的所有工作。您可以为此使用单独的会话范围bean,例如
    DataManager
    。然后您应该有一个请求范围的bean来表示所选项目,例如
    DataItem
    。在托管属性注入的帮助下,您可以将这两个bean家族化。

    您说得对,BalusC,我的bean正在会话中,因为我正在等待Cobol服务层。我不认为这是原因。2010年,我一回到工作岗位,就会证实这个理论。谢谢你的帮助。它很有魅力;)对于有相同问题的人,您可以在这里和BalusC的博客上获得更多信息