隐藏数据表列而不重新渲染它。 JSF客户端操作

时间:2015-05-12 13:57:38

标签: jsf primefaces

我曾经使用混合了jQuery和html的Spring MVC开发富客户端接口应用程序;但是,因为我们目前没有一个优秀的设计师,所以我想使用PrimeFaces 5.2来使用JSF 2.2,它应该给我带来专业的界面而不需要常规的设计师。

我非常了解如何将JSF用作基于组件的框架,但我担心的是我希望尽可能避免对服务器进行不必要的调用,因为我每天都有成千上万的请求。所以,我坚持使用jQuery与JSF,并尽可能避免ajax调用更新视图,除非我需要根据一些用户选择完全重构它。

以下是我尝试的方案: 我有一个表,用户可以根据每列的复选框选择隐藏/显示列。现在,正如我所说,我不想使用ajax重新渲染每个select / unselect的视图,而是使用了jQuery。

在我创建了我的第一个草稿页面并尝试使用jQuery之后,我发现我已经使用firebug来浏览页面源并构建复杂的jQuery来隐藏p:dataTable列。

这是正常的吗?我的意思是,当我查看代码并看看它依赖于Primefaces html结构生成时,我感到不自信。

我是不明智地使用JSF还是这是JSF的真相?

1 个答案:

答案 0 :(得分:1)

您可以在JSF视图中使用所需的所有jQuery / JS。主要问题是模型不会保持更新,只要您不同步状态即可。要看到隐藏/显示列并不是那么复杂,在这里你已经使用jQuery及其样式选择器得到了一个基本的完整工作示例:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head />
<h:body>
    <script>
        function switchColumn() {
            if ($('.style1').is(":visible")) {
                $('.style1').fadeOut(1000);
            } else {
                $('.style1').fadeIn(1000);
            }
        }
    </script>
    <h:form>
        <p:commandButton type="button" onclick="switchColumn();"
            value="Switch" />
        <p:dataTable var="test" value="#{testBean.values}">
            <p:column styleClass="style1">
                #{test.id}
            </p:column>
            <p:column>
                #{test.val1}
            </p:column>
        </p:dataTable>
    </h:form>
</h:body>
</html>
@ManagedBean
@ViewScoped
public class TestBean {

    private List<TestClass> values = new ArrayList<TestClass>();

    public TestBean() {
        values.addAll(Arrays.asList(new TestClass(1, "val1"), new TestClass(2,
                "val2")));
    }

    public List<TestClass> getValues() {
        return values;
    }

    public class TestClass {

        private Integer id;

        private String val1;

        public TestClass(Integer id, String val1) {
            this.id = id;
            this.val1 = val1;
        }

        public Integer getId() {
            return id;
        }

        public String getVal1() {
            return val1;
        }

    }

}

必须说JSF旨在为您控制请求内容和模型更新。在这些术语中,它不像SpringMVC那么轻,因为你不能选择发送什么(不完全)。所以,如果担心请求/响应性能,也许你应该选择其他框架。

另见: