faces-reviewlisted
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