Actions (Submits)
#[submit] handlers process form POSTs with typed validation and field-level errors.
LIVE
#[submit] handler
Same docs_greet handler — focus here is the submit endpoint and JSON response.
Define a submit handler
The live demo above uses docs_greet — same pattern as below.
#[data]
struct GreetForm {
name: String,
}
#[submit]
async fn docs_greet(form: GreetForm, _req: &FlowRequest)
-> Result<GreetResult, SubmitError>
{
if form.name.trim().is_empty() {
return Err(SubmitError::new("Fix errors")
.field("name", "Required"));
}
Ok(GreetResult { message: format!("Hello, {}!", form.name.trim()) })
}Wire to Form
view! {
<Form submit={docs_greet}>
<input name="name" type="text" required />
<button type="submit">"Greet"</button>
</Form>
}SubmitError
Return structured validation errors. The runtime maps field_errors to form fields when using client enhancement.
SubmitError::new("Invalid input")
.field("email", "Must be a valid email")
.field("message", "Too short")HTTP endpoint
Forms POST to /_resuma/submit/:name. Works without JavaScript via standard form submission.