He encontrado la solución aquí
http://www.javahowto.net/struts2/how...call-struts-2/ Código PHP:
<action name="login">
<interceptor-ref name="defaultStack" >
<param name="workflow.excludeMethods">homePage,logout</param>
<param name="validation.excludeMethods">homePage,logout</param>
</interceptor-ref>
<result name="homePage">/login/login.jsp</result>
<result name="input">/login/login.jsp</result>
<result name="backToLogin" type="redirectAction">login!homePage.action</result>
</action>
El problema es que tenía que añadir el excludeMethods al validation. No tengo muy claro por qué él le añade el mismo parámetro al workflow, lo he probado solo modificando el validation y también funciona.
Por si a alguien le interesa, hay una forma todavía más directa, usando en la action la anotación @SkipValidation sobre el método que no queremos que ejecute el validate.