Java 单击客户端是否显示/隐藏RichFaces组件?(没有AJAX)

Java 单击客户端是否显示/隐藏RichFaces组件?(没有AJAX),java,javascript,jsf,seam,richfaces,Java,Javascript,Jsf,Seam,Richfaces,我正在寻找一种显示/隐藏任意RichFaces组件的方法。在本例中,我有一个包含多行的。每一行都需要有自己独立的显示/隐藏链接,这样当您单击“显示详细信息”时,会发生两种情况: “显示详细信息”链接将重新呈现为“隐藏详细信息” 关联的详细信息列应变得可见(从rendered=“true”但style=“display:none;”“的状态开始) 如果不是绝对必要的话,我不想编写自己的JavaScript函数。我也不想让服务器端bean跟踪显示哪些detailColumns,然后通过AJAX重新呈

我正在寻找一种显示/隐藏任意RichFaces组件的方法。在本例中,我有一个包含多行的
。每一行都需要有自己独立的显示/隐藏链接,这样当您单击“显示详细信息”时,会发生两种情况:

  • “显示详细信息”链接将重新呈现为“隐藏详细信息”
  • 关联的详细信息列应变得可见(从
    rendered=“true”
    style=“display:none;”“
    的状态开始)
  • 如果不是绝对必要的话,我不想编写自己的JavaScript函数。我也不想让服务器端bean跟踪显示哪些detailColumns,然后通过AJAX重新呈现所有内容:这应该是纯粹的客户端行为。我不知道如何做到这一点

    以下伪代码(希望如此)说明了我的目标:

    <rich:column>
        <a href="#" onclick="#{thisRow.detailsColumn}.show();" rendered="">Show details</a>
        <a href="#" onclick="#{thisRow.detailsColumn}.hide();" rendered="">Hide details</a>
    </rich:column>
    
    <rich:column>
        <h:outputText value="#{thisRow.someData}" />
    </rich:column>
    
    <rich:column id="detailsColumn" colspan="2" breakBefore="true">
        <h:outputText value="#{thisRow.someMoreData}" />
    </rich:column>
    

    
    

    说到这里,您需要在JavaScript中从DOM中获取生成的HTML元素,然后在
    之间切换其CSS
    显示
    属性。据我所知,RichFaces没有为此提供现成的脚本/工具,但基本上没有那么难:

    function toggleDetails(link, show) {
        var elementId = determineItSomehowBasedOnGenerated(link.id);
        document.getElementById(elementId).style.display = (show ? 'block' : 'none');
    }
    

    show
    隐藏
    
    +1。您还可以使用内置的Richfaces jQuery
    rich:jQuery
    轻松完成类似的操作。您是否检查了生成的HTML源代码?你没看到生成的ID中的模式吗?利用它!:)这不是火箭科学。分隔符上的子字符串、拆分、追加等
    。我无法详细回答这个问题,因为你的问题中缺少信息,而且我不做RichFaces,所以我无法从头顶上分辨它生成的HTML。我觉得这对你来说已经够直截了当了。尽管如此,你可以在中找到另一个例子:)在未来,只需发表评论,要求澄清一点,而不是一个月后带着一股疯狂的气味。我会毫不犹豫地用扩展的解释/示例更新答案,说明如何实现这一点:)
    <h:outputLink onclick="toggleDetails(this, true); return false;">show</h:outputLink>
    <h:outputLink onclick="toggleDetails(this, false); return false;">hide</h:outputLink>