"CptnKirk" wrote :
| For example I don't think I'd recommend using a Home to populate a search
prototype. For search pages, an entity with an event scoped role combined with
Hibernate's Criteria API + Example criterion is great.
|
I prefer exactly the opposite, with a Search conversation scoped component that
holds my prototype entity during the search conversation. Gives me a lot of
control over what the user can select on the search screen and how I handle
this in the backend:
| @Name("userSearch")
| @Scope(ScopeType.CONVERSATION)
| public class UserSearch implements Serializable {
|
| @In
| private UserDAO userDAO;
|
| @In
| private FacesMessages facesMessages;
|
| private User exampleUser;
| private String orderByProperty;
| private boolean orderDescending;
| private String[] ignoreProperties;
| private int rowCount;
| private int maxPageSize;
| private int pageSize;
| private int page;
|
| @DataModel
| private List<User> usersList;
|
| @Create
| public void initialize() {
| pageSize = 15;
| maxPageSize = 1000;
| exampleUser = new User();
| orderByProperty = "username";
| orderDescending = false;
| ignoreProperties = new String[]{"passwordHash", "activated",
"createdOn"};
| }
|
| public void find() {
| page = 0;
| queryRowCount();
| if (rowCount != 0) queryUsers();
| }
|
| public void nextPage() {
| page++;
| queryUsers();
| }
|
| public void previousPage() {
| page--;
| queryUsers();
| }
|
| public void firstPage() {
| page = 0;
| queryUsers();
| }
|
| public void lastPage() {
| page = (rowCount / pageSize);
| if (rowCount % pageSize == 0) page--;
| queryUsers();
| }
|
| private void queryRowCount() {
| rowCount = userDAO.getRowCountByExample(exampleUser,
ignoreProperties);
| if (rowCount == 0) {
| facesMessages.addFromResourceBundleOrDefault(
| FacesMessage.SEVERITY_INFO,
| "noUserFound",
| "No user with given attributes was found, please try again."
| );
| }
| }
|
| private void queryUsers() {
| usersList = userDAO.findByExample(exampleUser, orderByProperty,
orderDescending, page * pageSize, pageSize, ignoreProperties);
| }
|
| public boolean isNextPageAvailable() {
| return usersList != null && rowCount > ((page * pageSize) +
pageSize);
| }
|
| public boolean isPreviousPageAvailable() {
| return usersList != null && page > 0;
| }
| public int getPageSize() {
| return pageSize;
| }
|
| public void setPageSize(int pageSize) {
| this.pageSize = pageSize > maxPageSize ? maxPageSize : pageSize; //
Prevent tampering
| }
|
| public int getRowCount() {
| return rowCount;
| }
|
| public User getExampleUser() {
| return exampleUser;
| }
|
| public void setExampleUser(User exampleUser) {
| this.exampleUser = exampleUser;
| }
|
| public String getOrderByProperty() {
| return orderByProperty;
| }
|
| public boolean isOrderDescending() {
| return orderDescending;
| }
|
| public void sortBy(String propertyName) {
| orderByProperty = propertyName;
| orderDescending = !isOrderDescending(); // Switch between ASC and
DESC
| page = 0; // Reset to first page
| queryUsers();
| }
|
| }
|
And the UI is bound to userSearch.exampleUser and the various other properties
and methods for pagination etc.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4039586#4039586
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4039586
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user