весна.увидеть что-то в браузере - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь приблизиться к весне.Есть и другие вопросы и ответы о начале весны.Я не хочу, чтобы что-то начиналось, но то, что я должен иметь.Цель очень похожа на приложение CRUD.

Вот список моих потребностей:1) некоторый HTML-виджет для управления табличными данными и формамибесшовная, интегрированная весной, но способная выполнять нумерацию таблиц2) управление сеансом не является проблемой, поскольку рассматривается весной3) базовая система авторизации.Я считаю, что управляемая контейнером безопасность плохо интегрирована с аутентификацией на основе форм.Spring утверждает, что имеет упрощенную, но мощную защиту, и мне просто нужно управлять учетными записями пользователей и «опытных пользователей».Могу ли я пойти весной?4) я выучил JPA2.У меня есть очень базовые потребности доступа к базе данных.Должен ли я остаться с JPA или спящий режим предпочтительнее?5) что мне не нужно начинать.веб-поток довольно большой предмет для изучения.мне это нужно?АОП же.мне это нужно?

однако, чтобы что-то вывести на экран, меня больше всего беспокоит пункт 1.

Приложение для малого и среднего размера, например небольшое приложение для адресной книгипока будет пагинатор.Мне нужно знать, что я смогу это сделать и что мне не понадобится другой коммутатор в архитектуре. *
заранее спасибо

* пример коммутатора архитектуры "хорошо, для этого вам понадобится JSFэто лучше интегрировано с seam, и jsf не обрабатывает загрузки файлов, которые фактически все используют, поэтому вы должны добавить также ICEFaces, которые на самом деле лучше управляются maven, которые вы в данный момент не используете ... "бесконечная история

Ответы [ 2 ]

4 голосов
/ 17 июня 2011

Взгляните на Spring Roo . Выполнение команды и просмотр того, что она сделала, - отличный способ понять, что делает типичное приложение java-stack. Например, скажите ему настроить постоянство с помощью спящего режима и взгляните на созданные файлы конфигурации. Скажите ему, чтобы создать контроллер MVC и посмотреть на созданные файлы. Это действительно удобно, по крайней мере, дать вам несколько советов о том, что такое большие строительные блоки. Кроме того, если вы изучите Roo, он напишет 80% вашего кода для вас!

2 голосов
/ 17 июня 2011

Существует два различных способа создания страниц с помощью пружины:

  • использование дополнительных компонентов JSP, таких как Библиотека тегов отображения - это может быть очень просто, поскольку в библиотеке JSPможет (но не обязан) полностью обрабатывать нумерацию страниц (недостаток: вам нужно загружать все элементы для каждого запроса или хранить их где-нибудь (например, в сеансе))
  • Реализовать его самостоятельнов контроллере: это, например, как я это сделал в одном из моих приложений, он основан на структуре Roo (см. ответ Joeslice).Слой DAO реализован с Hades , но вы можете сделать это без.По крайней мере, это только для иллюстрации того, как работает контроллер (я думаю, это то, что вы просили).

Контроллер:

@RequestMapping("/users")
@Controller
public class UserController {

@RequestMapping(method = RequestMethod.GET)
public ModelAndView list(
        @RequestParam(value = "page", required = false) Integer page,
        @RequestParam(value = "size", required = false) Integer size) {

    if (page != null || size != null) {
        Page<User> userPage = this.userDao.readAll(buildPageAble(page, size));

        ModelMap uiModel = pagingProperties(userPage);
        uiModel.addAttribute("users", userPage.asList());
        return new ModelAndView("users/list", uiModel);
    } else {
        return new ModelAndView("users/list", "users", this.userDao.readAll());
    }
}

private PageRequest buildPageAble(Integer pageOrNull, Integer sizeOrNull) {
    int page = (pageOrNull != null) ? pageOrNull : 1;
    int size = (sizeOrNull != null) ? sizeOrNull : DEFAULT_PAGE_SIZE;
    return new PageRequest(page - 1, size);
}

private ModelMap pagingProperties(Page<?> pagedResult) {
    ModelMap uiModel = new ModelMap();
    uiModel.addAttribute("page", pagedResult.getNumber());
    uiModel.addAttribute("size",pagedResult.getSize());        
    uiModel.addAttribute("maxPages", pagedResult.getTotalPages());        
    return uiModel;
}
}

A Page и PageRequestобъекты, предоставленные Аидом.Если вы не используете Hades, вы можете легко заменить его на свои собственные вещи. page-1 в buildPageAble объясняется тем, что базы интерфейса на Roo используют 1 для первой страницы, а Hades использует 0 для первой.

JSP основан на Spring Roo, но вы можете скопировать его и использовать без Roo.

список пользователей jspx:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:page="urn:jsptagdir:/WEB-INF/tags/form" xmlns:table="urn:jsptagdir:/WEB-INF/tags/form/fields" version="2.0">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <jsp:output omit-xml-declaration="yes"/>
    <page:list id="pl_com_queomedia_cfmt_core_domain_User" items="${users}">
        <table:table data="${users}" id="l_com_queomedia_cfmt_core_domain_User" path="/users" typeIdFieldName="businessId">
            <table:column id="c_com_queomedia_cfmt_core_domain_User_firstName" property="firstName"/>
            <table:column id="c_com_queomedia_cfmt_core_domain_User_lastName" property="lastName"/>
            <table:column id="c_com_queomedia_cfmt_core_domain_User_login" property="login"/>
            <table:column id="c_com_queomedia_cfmt_core_domain_User_emailAddress" property="emailAddress" maxLength="25"/>
        </table:table>
    </page:list>
</div>

При этом используются теги Roo, важно использовать util: разбиение на страницы, используемое fields: table, потому чтоэто добавляет пейджинговый материал к выводу:

поля: table.tagx

...
<c:if test="${not empty param.page}">
   <input name="page" type="hidden" value="1" />
</c:if>
<c:if test="${not empty param.size}">
     <input name="size" type="hidden" value="${fn:escapeXml(param.size)}" />
</c:if>
...
<c:if test="${not empty maxPages}">
    <util:pagination maxPages="${maxPages}" page="${param.page}" size="${param.size}"  />
</c:if>
...

util: pagination.tagx

<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:spring="http://www.springframework.org/tags" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
  <jsp:output omit-xml-declaration="yes" />

  <jsp:directive.attribute name="maxPages" type="java.lang.Integer" required="true" rtexprvalue="true" description="The maximum number of pages available (ie tableRecordCount / size)" />
  <jsp:directive.attribute name="page" type="java.lang.Integer" required="false" rtexprvalue="true" description="The current page (not required, defaults to 1)" />
  <jsp:directive.attribute name="size" type="java.lang.Integer" required="false" rtexprvalue="true" description="The number of records per page (not required, defaults to 10)" />
  <jsp:directive.attribute name="render" type="java.lang.Boolean" required="false" rtexprvalue="true" description="Indicate if the contents of this tag and all enclosed tags should be rendered (default 'true')" />

  <c:if test="${empty render or render}">

    <c:if test="${empty page || page lt 1}">
      <c:set var="page" value="1" />
    </c:if>

    <c:if test="${empty size || size lt 1}">
      <c:set var="size" value="10" />
    </c:if>

    <spring:message code="list_size" var="list_size" htmlEscape="false" />
    <c:out value="${list_size} " />

    <c:forEach var="i" begin="5" end="25" step="5">
      <c:choose>
        <c:when test="${size == i}">
          <c:out value="${i}" />
        </c:when>
        <c:otherwise>
          <spring:url value="" var="sizeUrl">
            <spring:param name="page" value="1" />
            <spring:param name="size" value="${i}" />
          </spring:url>
          <a href="${sizeUrl}">${i}</a>
        </c:otherwise>
      </c:choose>
      <c:out value=" " />
    </c:forEach>
    <c:out value="| " />

    <c:if test="${page ne 1}">
      <spring:url value="" var="first">
        <spring:param name="page" value="1" />
        <spring:param name="size" value="${size}" />
      </spring:url>
      <spring:url value="/resources/images/resultset_first.png" var="first_image_url" />
      <spring:message code="list_first" var="first_label" htmlEscape="false" />
      <a class="image" href="${first}" title="${fn:escapeXml(first_label)}">
        <img alt="${fn:escapeXml(first_label)}" src="${first_image_url}" />
      </a>
    </c:if>
    <c:if test="${page gt 1}">
      <spring:url value="" var="previous">
        <spring:param name="page" value="${page - 1}" />
        <spring:param name="size" value="${size}" />
      </spring:url>
      <spring:url value="/resources/images/resultset_previous.png" var="previous_image_url" />
      <spring:message code="list_previous" var="previous_label" htmlEscape="false" />
      <a class="image" href="${previous}" title="${fn:escapeXml(previous_label)}">
        <img alt="${fn:escapeXml(previous_label)}" src="${previous_image_url}" />
      </a>
    </c:if>
    <c:out value=" " />
    <spring:message code="list_page" arguments="${page},${maxPages}" argumentSeparator="," />
    <c:out value=" " />
    <c:if test="${page lt maxPages}">
      <spring:url value="" var="next">
        <spring:param name="page" value="${page + 1}" />
        <spring:param name="size" value="${size}" />
      </spring:url>
      <spring:url value="/resources/images/resultset_next.png" var="next_image_url" />
      <spring:message code="list_next" var="next_label" htmlEscape="false" />
      <a class="image" href="${next}" title="${fn:escapeXml(next_label)}">
        <img alt="${fn:escapeXml(next_label)}" src="${next_image_url}" />
      </a>
    </c:if>
    <c:if test="${page ne maxPages}">
      <spring:url value="" var="last">
        <spring:param name="page" value="${maxPages}" />
        <spring:param name="size" value="${size}" />
      </spring:url>
      <spring:url value="/resources/images/resultset_last.png" var="last_image_url" />
      <spring:message code="list_last" var="last_label" htmlEscape="false" />
      <a class="image" href="${last}" title="${fn:escapeXml(last_label)}">
        <img alt="${fn:escapeXml(last_label)}" src="${last_image_url}" />
      </a>
    </c:if>
  </c:if>
</jsp:root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...