← ClaudeAtlas

faces-reviewlisted

Review Jakarta Faces code for common mistakes, anti-patterns, and rule violations
omnifaces/claude-faces-expert · ★ 14 · Code & Development · score 76
Install: claude install-skill omnifaces/claude-faces-expert
*Version 1.2.3* Review the Jakarta Faces code in `$ARGUMENTS` (if no argument, scan the project for `.xhtml` and backing bean files) against the rules in `.claude/faces/rules.md` and its topic files. ## Review Checklist ### XHTML / Facelets - XML namespaces match the project's Faces version. - HTML5 doctype `<!DOCTYPE html>` is used, not XHTML doctype. - No "god form" (single form wrapping entire page); forms are scoped to logical sections. - No nested `UIForm` components. - `UIInput` and `UICommand` components are inside `UIForm`. - Every `UIInput` has a corresponding `UIMessage`. - A catch-all `UIMessages` with `redisplay="false"` exists in each view; when using ajax, its ID is covered by `render`/`update`. - Conditionally rendered components that are ajax-updated are wrapped in an always-rendered container, and ajax updates target the wrapper ID. - `NamingContainer`, `UIInput` and `UICommand` components have explicit IDs (no generated IDs); IDs follow naming convention (property name for `value`, method name for `action`, view ID name for forms/panels). - `binding` is not used for data binding; `binding` is only used on page-scoped variables for component cross-referencing within the same view. - Ajax `render`/`update` references across `NamingContainer` boundaries use full client ID with leading colon. - JSTL tags are only used for build-time view construction, not for conditional rendering (use `rendered` attribute instead). - No inline styles; CSS is in separate file