我必須把我的dataTable變成lazy dataTable。我該怎麼做?下面是我的示例代碼:如何使用Spring和Hibernate在Primefaces中執行lazy dataTable?
IndexBean.java
@Name("indexBean")
public class IndexBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
UserService userService;
private List<User> userList;
@Inject
MessageService messageService;
private List<Message> messageList;
private Integer dataTableRendered;
public void getAllUser() {
setDataTableRendered(1);
userList = new ArrayList<User>();
userList = userService.getAllUser();
if (userList.size() > 0) {
addMessageSuccess("Success", "Success");
} else {
addMessageError("Failure", "Failure!");
}
}
public void getAllMessages() {
setDataTableRendered(2);
messageList = new ArrayList<Message>();
messageList = messageService.getAllMessages();
if (messageList.size() > 0) {
addMessageSuccess("Success", "Success");
} else {
addMessageError("Failure", "Failure!");
}
}
public void addMessageSuccess(String summary, String detail) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void addMessageError(String summary, String detail) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
FacesContext.getCurrentInstance().addMessage(null, message);
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public List<Message> getMessageList() {
return messageList;
}
public void setMessageList(List<Message> messageList) {
this.messageList = messageList;
}
public Integer getDataTableRendered() {
return dataTableRendered;
}
public void setDataTableRendered(Integer dataTableRendered) {
this.dataTableRendered = dataTableRendered;
}
}
的index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html">
<h:head></h:head>
<p:layout fullPage="true">
<!-- Status Waiting Dialog -->
<p:ajaxStatus onstart="PF('statusDialog').show()"
onsuccess="PF('statusDialog').hide()" />
<p:dialog widgetVar="statusDialog" modal="true" draggable="false"
closable="false" resizable="false" showHeader="true"
header="Please wait...">
<p:graphicImage value="/images/loader.gif"
style=" float: left;position: relative;left: 30%;" />
</p:dialog>
<!-- Left Layout -->
<p:layoutUnit position="west" id="west">
<p:growl autoUpdate="true" id="infoMessage" showDetail="true"
showSummary="true" sticky="false" />
<p:commandButton value="Get Users"
actionListener="#{indexBean.getAllUser}"
update="infoMessage,centerForm,centerForm:userTable" />
<p:commandButton value="Get Messages"
actionListener="#{indexBean.getAllMessages}"
update="infoMessage,centerForm,centerForm:messageRaporTable" />
</p:layoutUnit>
<!-- Center Layout -->
<p:layoutUnit position="center" id="center">
<h:form id="centerForm">
<!-- User dataTable -->
<p:dataTable id="userTable" var="user"
value="#{indexBean.userList }" paginator="true" rows="10"
lazy="true" rendered="#{indexBean.dataTableRendered ==1}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,20,25,50,100">
<p:column headerText="userid" sortBy="#{user.userId}"
filterBy="#{user.userId}">
<h:outputText value="#{user.userId}"></h:outputText>
</p:column>
<p:column headerText="username" sortBy="#{user.userName}"
filterBy="#{user.userName}">
<h:outputText value="#{user.userName}"></h:outputText>
</p:column>
<p:column headerText="firstname" sortBy="#{user.userFirstName}"
filterBy="#{user.userFirstName}">
<h:outputText value="#{user.userFirstName}"></h:outputText>
</p:column>
</p:dataTable>
<p:column headerText="Message Id"
filterBy="#{message.messageId}"
sortBy="#{message.messageId}">
<h:outputText value="#{message.messageId}" />
</p:column>
<p:column headerText="Sender"
sortBy="#{message.messageSender}" filterBy="#{message.messageSender}">
<h:outputText value="#{message.messageSender}" />
</p:column>
<p:column headerText="Receiver"
sortBy="#{message.messageReceiver}"
filterBy="#{message.messageReceiver}">
<h:outputText value="#{message.messageReceiver}" />
</p:column>
<p:column headerText="Subject"
sortBy="#{message.messageSubject}"
filterBy="#{message.messageSubject}">
<h:outputText value="#{message.messageSubject}" />
</p:column>
<p:column headerText="Message"
sortBy="#{message.messageText}"
filterBy="#{message.messageText}">
<h:outputText value="#{message.messageText}" />
</p:column>
</p:dataTable>
</h:form>
</p:layoutUnit>
</p:layout>
UserService.java
public interface UserService {
public List<User> getAllUser();
}
UserServiceImpl.java
@Service("userService")
@Component
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public List<User> getAllUser() {
return userDAO.getAllUser();
}
}
UserDAO.java
public interface UserDAO {
public List<User> getAllUser();
}
UserDAOImpl.java - 其實這SQL更加複雜。
@Component
@Repository("userDAO")
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@SuppressWarnings("unchecked")
@Override
public List<User> getAllUser() {
List<User> userList = new ArrayList<User>();
String sql = "select * from SECRETDB.USER";
try {
Query query = getSession().createSQLQuery(sql).addScalar("userOID", StringType.INSTANCE)
.addScalar("userName", StringType.INSTANCE).addScalar("firstName", StringType.INSTANCE)
.setResultTransformer(Transformers.aliasToBean(User.class)).setCacheable(false)
.setCacheMode(CacheMode.IGNORE);
userList = query.list();
getSession().clear();
} catch (HibernateException e) {
getSession().clear();
e.printStackTrace();
}
return userList;
}
User.java
public class User {
private String userOID;
private String userName;
private String firstName;
public String getUserOID() {
return userOID;
}
public void setUserOID(String userOID) {
this.userOID = userOID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
HibernateDaoSupport.java
public abstract class HibernateDaoSupport {
@Autowired
private SessionFactory sessionFactory;
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
}
什麼是您的實際編碼問題?我看到所有非惰性Java代碼,並且只能在數據表上使用懶惰屬性。如下所示,首先使用展示臺,搜索互聯網,敲打你的頭,再次敲你的頭,然後回到真正的編碼問題。 – Kukeltje