Buenas hualro.
Gracias por contestar!
Es proyecto es más grande, os puse una parte sólo para no marearos, pero intento completar un poco más.
Código PHP:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="login" extends="struts-default" namespace="/">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="login">
<result type="tiles">login.tiles</result>
</action>
<action name="logout" method="logout" class="LoginAction">
<result name="logout" type="tiles">login.tiles</result>
</action>
<action name="acceso" method="login" class="LoginAction">
<result name="success" type="tiles">entrada.tiles</result>
<result name="error" type="tiles">login.tiles</result>
</action>
</package>
</struts>
Los actions los manejo con Struts, no uso Spring.
Lo del link lo tengo puesto en ese caso por poner la imagen en medio sin tener que modificar los estilos del botón.
En otros puntos lo tengo hecho son <s:submit/> incluso con <s:submit action="elquetoque"/>
Como ves en el struts.xml uso DMI para hacer la invocación de los actions en caso de necesitarla.
Lo de los setters lo omití en el código que puse por acortar un poco y no marear mucho, pero están puestos todos los get y set correspondientes.
De hecho, no tengo problema con el login, pilla bien el usuario y la contraseña, el problema... es que se loguea 6 veces...
Es ese caso... podría darme por vencido.... y mirar hacia otro lado... al fin y al cabo no hay "problema", porque el usuario o entra o no. Pero cuando llego a la hora de guardar datos... es donde se fastidia el asunto. Porque me guarda los datos, tantas veces como se invoque automáticamente el action, y eso sí que no lo puedo dejar pasar.
Muchas gracias!