primefaces绘制界面很方便,因此想做个简单的测试,实现一个jsf页面,一个managedBean,对单表进行增删改查操作。初步想法绘制一个jsf页面,里面包含一个dataTable控件,上面有个添加按钮,每行有修改和删除按钮,点击按钮后弹出dialog窗口,操作数据并提交。managedBean中实现增删改查的具体方法。
但发现dialog窗口中的textInput控件的数据绑定失败,查找文档后发现需要将dialog声明移到form之外,并在dialog中在加一个form。但会引起update=“XXX”的引用失效,这时可使用jquery的引用方式(update="@([id$=cityList])" )。
创建一个简单的表:Create Table(F1 int, F2 nvarchar(100));
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml">
<ui:define name="content">
<h:form id="cityForm" prependId="true">
<p:panel id="cityList" header="城市信息维护" style="margin-bottom:20px">
<p:commandButton value="添加" type="button" οnclick="cdAdd.show()"/>
<p:dataTable var="test" value="#{testView.tests}" rows="10" paginator="true">
<f:facet name="header">
城市信息列表
</f:facet>
<p:column headerText="编号" sortBy="#{test.f1}">
<h:outputText value="#{test.f1}" />
</p:column>
<p:column headerText="名称" sortBy="#{test.f2}">
<h:outputText value="#{test.f2}" />
</p:column>
<p:column headerTest="操作">
<p:commandLink oncomplete="cd.show()" title="View Detail" update="@([id$=cityPanel])">
<p:graphicImage value="/image/edit.png"/>
<p:ajax event="click" update="cityPanel" />
<f:setPropertyActionListener value="#{test}" target="#{testView.selectedTest}" />
</p:commandLink>
<p:commandLink oncomplete="cdDelete.show()" title="删除" update="@([id$=cityPanel])">
<p:graphicImage value="/image/delete.png"/>
<p:ajax event="click" update="cityPanel" />
<f:setPropertyActionListener value="#{test}" target="#{testView.selectedTest}" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
<p:dialog message="添加城市信息" header="城市信息" severity="alert" widgetVar="cdAdd" appendToBody="true" modal="true">
<h:form>
<p:panelGrid columns="2" style="margin-bottom:10px">
<h:outputLabel for="cityName1" value="Firstname:" />
<h:inputText id="cityName1" value="#{testView.cityName}" />
<p:commandButton value="添加" actionListener="#{testView.addCity}" update="@([id$=cityList])" oncomplete="cdAdd.hide()"/>
<p:commandButton value="取消" οnclick="cdAdd.hide();" type="button" />
</p:panelGrid>
</h:form>
</p:dialog>
<p:dialog message="修改城市信息" header="城市信息" severity="alert" widgetVar="cd" appendToBody="true" modal="true">
<h:form>
<p:panelGrid id="cityPanel" columns="2" style="margin-bottom:10px">
<h:outputLabel for="citytname" value="Firstname:" />
<h:inputText id="citytname" value="#{testView.selectedTest.f2}" />
<p:commandButton value="修改" actionListener="#{testView.modifyCity}" update="@([id$=cityList])" oncomplete="cd.hide()"/>
<p:commandButton value="取消" οnclick="cd.hide();" type="button" />
</p:panelGrid>
</h:form>
</p:dialog>
<p:dialog message="修改城市信息" header="城市信息" severity="alert" widgetVar="cdDelete" appendToBody="true" modal="true">
<h:form>
<p:panelGrid id="cityPanel" columns="2" style="margin-bottom:10px">
<p:commandButton value="删除" actionListener="#{testView.deleteCity}" update="@([id$=cityList])" oncomplete="cdDelete.hide()"/>
<p:commandButton value="取消" οnclick="cdDelete.hide();" type="button" />
</p:panelGrid>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>
package com.henreash.view;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.henreash.model.Test;
import com.henreash.service.TestService;
@ManagedBean
@ViewScoped
public class TestView implements Serializable{
/**
*
*/
private static final long serialVersionUID = -1565242107915954858L;
private List<Test> tests;
private String cityName;
private Test selectedTest;
public List<Test> getTests() {
return tests;
}
public void setTests(List<Test> tests) {
this.tests = tests;
}
public TestView() {
init();
}
@SuppressWarnings("unchecked")
//@PostConstruct
public void init() {
loadData();
}
private void loadData() {
TestService ts = new TestService();
try {
tests = ts.findAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void addCity() {
System.out.println("===============addCity " + cityName);
TestService ts = new TestService();
ts.addTest(cityName);
loadData();
}
public void modifyCity() {
System.out.println("===============modifyCity");
TestService ts = new TestService();
ts.modify(selectedTest);
loadData();
}
public void deleteCity() {
TestService ts = new TestService();
ts.delete(selectedTest);
loadData();
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public Test getSelectedTest() {
if (selectedTest != null)
System.out.println(">>>>>>getSelectedTest " + selectedTest.getF2());
return selectedTest;
}
public void setSelectedTest(Test selectedTest) {
System.out.println(">>>>>>setSelectedTest " + selectedTest.getF2());
this.selectedTest = selectedTest;
}
}
效果: