jsp - form - struts2 tags
Nombre de acción/nombre de url en depuradores utilizando Struts 2 (1)
Esto me ha estado molestando desde que comencé a trabajar con esta aplicación web el año pasado (no tenía experiencia con el desarrollo web). No sé si esta aplicación está estructurada incorrectamente o si es así.
Mi página de welcome
es realmente una página de inicio de sesión, y después de que el usuario inicia sesión, mi aplicación va a una página principal, donde tienen un menú para acceder a otras funciones.
Esto es struts.xml
:
<action name="Welcome">
<interceptor-ref name="newStack" />
<result name="success">Login.jsp</result>
</action>
<action name="actLogin" class="actionLogin">
<interceptor-ref name="newStack" />
<result name="success">HomePage.jsp</result>
<result name="error">Login.jsp</result>
</action>
<action name="actHomePage" class="actionHomePage">
<interceptor-ref name="newStack" />
<result name="viewUsers"> ViewUsers.jsp</result>
<result name="addUser"> AddUser.jsp</result>
<result name="viewWidgets">ViewWidgets.jsp</result>
<result name="addWidget"> AddWidget.jsp</result>
</action>
Los archivos JSP se ven así: Login.jsp
:
<s:form action="actLogin" name="formLogin" method="post">
<s:textfield name="userId" id="txtUserId"/>
<s:password name="password" id="txtPassword"/>
.. login submit button ...
</s:form>
HomePage.jsp:
<s:form action="actHomePage" name="formHomePage" method="post">
. . . menu items that set values for action to pick up to route to the correct page
</s:form>
ViewUsers.jsp:
<s:form action="actViewUsers" name="formViewUsers" method="post">
<h2>User List</h2>
. . .
</s:form>
El problema con esto es la URL que el usuario ve y las URL que enumeran los archivos de origen en un depurador (Chrome, IE o Firefox) siempre están mal. La URL que ven el usuario y el depurador es Welcome
en la página de inicio de sesión (lo cual está bien), pero después de iniciar sesión ven actLogin.html
en la página de HomePage
, y ven HomePage.html
en la página ViewUsers
. La URL siempre está detrás de la página en la que está realmente porque usa el nombre de la acción.
¿Mi JSP de inicio de sesión no debe tener su acción de nombre con el nombre LOGIN porque mientras se realiza la acción, el resultado de esa acción va a HomePage
?
¿Está esta aplicación estructurada extraña y hay una mejor manera de hacer esto?
Esto sucede como resultado del mal diseño del flujo de trabajo. Para corregirlo, debe leer sobre el patrón PRG . Tu puedes cambiar
<action name="actLogin" class="actionLogin">
<interceptor-ref name="newStack" />
<result name="success" type="redirectAction">actHomePage</result>
<result name="error">Login.jsp</result>
</action>
<action name="actHomePage" class="actionHomePage">
<interceptor-ref name="newStack" />
<result name="success">HomePage.jsp</result>
</action>
no se necesitan otros resultados, pero puede conservarlos si necesita reenviar a una página diferente con la misma acción en la URL.