To give you a little context, imagine I send an email to a user and there's an unsubscribe link:
/unsubscribe?id=123
I made an unsubscribe page that has attached a Dababase Update query, so the validation is just for that, I don't care much what the user sees if validation fails, at least for a minimum viable implementation
My understanding is that only $_POST parameters with Linked Fields can show an error in the UI. I haven't used validations for $_GET parameters when submitting a form in the UI. Try by adding the Linked Field property, matching the input field ID, to check whether it shows the error message.
In this example, you have a query parameter id=123. This query parameter can be used to populate a hidden input field value in a server connect form when user clicks on the unsubscribe link. This way you can use $_POST variables with proper validation for both server and UI, and show an error message if validation fails.
The validation is only executed if the server action is accessed directly, when it is called as a sub action the validation in not run. This is for sub actions you include or execute from an action and for templates which execute them as a sub action for the template. Executing validation after other steps already have run and output is already generated will result in server errors.
I will check if there is perhaps another way to do validation in templates but with the current implementation it is not possible.