3.7 KiB
Component Guidelines
JSP fragment, form, table, and reusable UI conventions.
Overview
This project uses JSP-based presentation, not a component framework. Treat JSP includes, fragments, tag files, form layouts, tables, and shared CSS classes as the reusable UI units.
JSP Includes And Fragments
-
Use shared fragments for repeated layout pieces such as header, navigation, sidebar, footer, pagination, and message banners.
-
Use
.jspfincludes for the current JSP presentation layer. The authenticated application frame lives insrc/main/webapp/WEB-INF/jsp/common/header.jspfand owns the dark sidebar, top utility bar, module navigation, global search, user display, and logout link. -
Any
.jspffragment that contains user-visible Simplified Chinese text must declare<%@ page pageEncoding="UTF-8" %>at the top. Do not rely only on the including JSP page or responseContent-Type; Tomcat/Jasper can otherwise compile the fragment with a non-UTF-8 default and render mojibake. -
JSP-rendered HTML responses must be served as
text/html;charset=UTF-8by the encoding filter or the JSP page directive. Request/response character encoding alone is not enough for browsers to decode Simplified Chinese safely. -
Preserve role-conditioned navigation in that shared frame: administrator-only links stay inside
sessionScope.userRole == 'administrator'; staff links stay insideadministrator or librarian; reader-only links stay insidesessionScope.userRole == 'reader'. -
For active navigation in forwarded JSPs, derive the current location from the public Servlet path before falling back to the JSP servlet path. Use exact matches or slash-delimited prefixes; do not use broad
fn:containschecks againstrequestURI, because forwarded pages expose/WEB-INF/jsp/...paths and can activate unrelated sidebar items.<c:set var="currentPath" value="${requestScope['javax.servlet.forward.servlet_path']}" /> <c:if test="${empty currentPath}"> <c:set var="currentPath" value="${pageContext.request.servletPath}" /> </c:if> <a class="${(currentPath == '/books' or fn:startsWith(currentPath, '/books/')) ? 'is-active' : ''}"> -
Keep fragments presentation-focused. They should not open database connections or call DAOs.
Interface Copy
- Render user-visible JSP copy in Simplified Chinese, including navigation, headings, form labels, buttons, table headers, empty states, and accessible labels.
- Keep machine-readable values unchanged: URLs, request parameter names, CSS classes, Java identifiers, enum codes, database values, and servlet names stay in their existing code form.
- Translate display helper output and controller/service messages when they are rendered into JSP pages.
Forms
- Forms should post to Servlet controller endpoints, not directly to DAOs or JSP-only handlers.
- Render validation messages from request attributes set by controllers.
- Preserve user-entered values on validation failure where practical.
- Use clear labels, required-field indicators, and server-side validation for book, reader, borrowing, login, and permission forms.
Tables And Reports
- Use consistent table patterns for book lists, reader lists, borrowing records, rankings, inventory reports, overdue reports, and system logs.
- Include stable empty states and pagination or filtering controls when lists can grow.
- Keep search forms aligned with supported filters: title, author, category, and book ID.
Styling
Implement JSP/CSS pages to faithfully restore the approved image design. Prefer semantic class names tied to page structure or reusable UI roles. Avoid adding a frontend component framework unless explicitly introduced later.