在部分刷新的面板中有条件地隐藏编辑框

Jos*_*lly 2 xpages

我的自定义控件包含一个面板中的许多组合框和文本输入框.组合框值彼此依赖,因此当更改组合框时,将在面板上执行部分刷新以刷新其他组合框的值.

其中一个文本输入框也依赖于其中一个组合框 - 假设组合框标题是"你有什么特殊要求吗?" 值为"是"和"否".如果值为"否",则隐藏special_requirements文本框,并在querySaveDocument事件中将其保存为文档"N/A".如果值为"是",则显示special_requirements文本框,用户必须将其填写,并保存其输入.

我一直遇到的问题是,如果我计算文本框的"可见"属性的值,那么它会被适当地显示/隐藏,但只要刷新面板,任何用户输入都会被清除 - 例如,用户选择"是",输入一些文本,然后更改另一个导致部分刷新的组合框 - 文本框仍然显示,但现在为空.

目前我正在使用一种解决方法,而不是计算"Visible"属性,我计算CSS样式,在不需要文本框时将其设置为隐藏.但是,这意味着用户可以输入它,尽管在组合框中选择"否",因此它不是理想的解决方案.是否有一种方法可以在刷新之间保留用户以前的输入,如果使用"可见"属性将组合框选项从"是"更改为"否",则将其删除?

Sve*_*ach 6

假设Naveens示例与您的问题相同,则您在JSF生命周期中遇到一个简单问题:如果在更新模型阶段期间组件不可见,则提交的内容不会被应用并丢失.

只需将渲染属性更改为:

<xp:this.rendered>
   <![CDATA[#{javascript:
      if( view.isRenderingPhase() ){
         return getComponent("comboBox1").getValue() == "Yes"
      }else{
         return true;
      }
   }]]>
</xp:this.rendered>
Run Code Online (Sandbox Code Playgroud)