struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Olivier THIERRY" <olivier.thie...@gmail.com>
Subject [S2] How to set an action as input result ?
Date Tue, 29 May 2007 13:36:53 GMT
Hi,

I need to do something that looks very simple to me :
- a form with a select list
- the data in the list comes from database
- when submitting the form, I want to validate datas. If it doesn't
validate, I display the form again

I configured two actions :
- An "init" action, that loads data from the database and redirects to the
JSP page
- A "submit" action, that validates datas and writes data in the database

    <package name="absences" namespace="/absences" extends="struts-default">
        <action name="initCreerDemandeAbsence"
class="creerDemandeAbsenceAction" method="init">
            <result
name="success">/jsp/absences/creerDemandeAbsence.jsp</result>
        </action>
        <action name="submitCreerDemandeAbsence"
class="creerDemandeAbsenceAction">
            <interceptor-ref name="defaultStack" />
            <result
name="input">/absences/initCreerDemandeAbsence.action</result>
            <result
name="success">/jsp/absences/confirmerCreationDemandeAbsence.jsp</result>
        </action>
    </package>
</struts>

My action class extends ActionSupport and contains variables and the
following methods :

    public String init() throws Exception {
        this.motifs = getServiceAbsence().getAllMotifsAbsence();
        return SUCCESS;
    }

    public String execute() throws Exception {
        demandeAbsence.setMatriculeAuteur(SecurityContextHolder.getContext
().getAuthentication().getName());
        demandeAbsence.setVisa(VisaDemande.VISA_ATTENTE.getValue());
        demandeAbsence.setLignes(new
VOLigneDemandeAbsence[]{getLigneDemandeAbsence()});
        demandeAbsence = getServiceAbsence().createDemande(demandeAbsence);
        return SUCCESS;
    }

And my JSP page is as following :

<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.1 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Demande d'absence</title>
    <s:head theme="ajax" />
</head>
<body>
    <s:actionerror />
    <s:form action="submitCreerDemandeAbsence" id="form1" validate="false"
method="post">
        <s:datetimepicker
            name="demandeAbsence.dateDemande"
            label="Date de la demande"
            required="true"
            requiredposition="left"
            displayFormat="dd/MM/yyyy"
            />
        ....
        <s:select
            name="ligneDemandeAbsence.motif"
            label="Motif"
            list="motifs"
            listKey="nom"
            listValue="nom"
            headerKey=""
            headerValue="--- Sélectionnez un motif ---"
            required="true"
            requiredposition="left"
            />
        ....
        <s:submit
            type="button"
            theme="xhtml"
            />
    </s:form>
</body>
</html>

But it doesn't work this way : when there are validation errors, I have a
404 HTTP error when trying to redirect to "initCreerDemandeAbsence" action
(I need to do this to have the select list datas loaded from database).
In fact it works only when I set a JSP page as result ...

Anyone knows how to set an action as an input result rather than a JSP page
?
And are there better practices to do what I want ?

Thanks in advance

Olivier

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message