Jsf 如何调用按条件呈现的UICommand组件的操作方法?

Jsf 如何调用按条件呈现的UICommand组件的操作方法?,jsf,Jsf,请参考这个问题-,我的一个UICommand组件是有条件地呈现的,在链接问题的答案中说-第5点-如果组件或其任何父级呈现或禁用的属性为false-那么将不会调用action方法?如果是这样,我如何实现相同的功能?附近有工作吗?还是耍花招?还是其他方法 谢谢 至此,您希望在后续请求中保留负责呈现的条件的属性。此问题有几种解决方案: 将bean放入会话范围。这很容易,但很痛。这对用户体验不利,因为更改将反映在用户在同一会话中打开的所有选项卡/窗口中 使用传输属性。理论上很容易,但在实践中也很痛苦。即

请参考这个问题-,我的一个UICommand组件是有条件地呈现的,在链接问题的答案中说-第5点-如果组件或其任何父级呈现或禁用的属性为false-那么将不会调用action方法?如果是这样,我如何实现相同的功能?附近有工作吗?还是耍花招?还是其他方法


谢谢

至此,您希望在后续请求中保留负责呈现的
条件的属性。此问题有几种解决方案:

  • 将bean放入会话范围。这很容易,但很痛。这对用户体验不利,因为更改将反映在用户在同一会话中打开的所有选项卡/窗口中

  • 使用
    传输属性。理论上很容易,但在实践中也很痛苦。即,只要在相同形式的任何其他输入中发生验证/转换错误,该值就会丢失。JSF处理隐藏输入元素的方式很奇怪。解决方法是在bean中使用
    并执行
    隐藏的.getValue()
    隐藏的.setValue()

  • 如果使用的是
    而不是
    ,则可以使用
    来传输属性。它将作为请求参数提供,您可以在bean的(post)构造函数中检查它

  • 使用。到目前为止,这是一个完美的解决方案。这将在后续请求中保留该值(甚至是一个完整的bean)

  • 如果您已经使用了JSF2.0,那么这个问题就解决了。它的行为类似于

    另见:

    诀窍是在运行操作时让“rendered”求值为true,然后在操作方法中将条件更改为false

    假设您在bean中有一个基于布尔值的链接呈现,称为“编辑”。然后,您的操作将如下所示:

    public String myAction() {
        // whatever you want your action to do
    
        editing = false;
    }
    

    编辑:这假设bean是会话范围的,或者是请求之间传播的布尔值。

    在我的例子中,Javascript是用来拯救的,这意味着,无论有条件地显示什么,都将它们放在HTML部分,直到所需的事件发生,才显示它们
    display:none


    HTML部分可以有任何JSF标记(包括CommandButtons),只要您愿意,并且可以正常工作(调用操作方法和内容)。

    您希望在后续请求中保留负责呈现条件的属性。我不明白的是-显示命令按钮是因为渲染结果为真。在这里保留财产意味着什么?单击按钮时,它是否已保留?(!)当HTTP响应完成时,请求范围的bean被破坏。当您通过单击link/button发出新的HTTP请求时,将创建一个新的bean。这个新bean将具有所有默认属性。默认属性可能导致还原视图期间
    呈现的
    属性求值为
    false
    。您必须注意重新创建的bean的属性与显示表单时相同。你可以利用bean的构造函数,
    @PostConstruct
    方法,组件绑定,
    t:saveState
    等等来实现这一点。谢谢你。我明白你的意思了。但我不知道怎么做。我不能使用Tomahawk lib文件。如何使用组件绑定或bean的构造函数来实现这一点?您有示例代码吗?这实际上取决于负责
    呈现的
    属性所表示的内容以及它在初始请求中的构造方式。在上一个问题中,它被访问为
    {adminBean.displayResultsSize}
    。这看起来非常像您在表中显示的结果的大小。然后你需要重新加载相同的结果。Thank.Javascript来拯救你,你更喜欢使用Javascript而不是这些东西。