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