我曾经使用混合了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的真相?
答案 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那么轻,因为你不能选择发送什么(不完全)。所以,如果担心请求/响应性能,也许你应该选择其他框架。
另见: