jsp useBean est NULLE par getAttribute par la servlet
utilisateur est nulle dans le servlet. Pls laissez-moi si je faisais erreur.
je m en essayant d'obtenir tout élément html dans bean rateCode.jsp
<%@page import="com.hermes.data.RateCode_" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Rate Code</title>
</head>
<body>
<jsp:useBean id="user" class="com.hermes.data.RateCode_" scope="request" >
<jsp:setProperty name="user" property="*"/></jsp:useBean>
<form id="f_rateCode" action="/ratePromoCodes" method="post" >
<table align="center" border="1" cellspacing="0">
<tr>
<td colspan="2" align="center" class="header">Rate Code Administrations</td>
</tr>
<tr>
<td align="right" style="border-style: solid;">Rate Code:</td>
<td align="left" style="border-style: solid;">
<input type="text" id="code" name="code" value="${user.code}" size="10" maxlength="32" style="width: 100px"/>
</td>
</tr>
<tr>
<td align="right" style="border-style: solid;">Rate Description:</td>
<td align="left" style="border-style: solid;">
<input type="text" id="description" name="description" value="<%=user.getDescription()%>" maxlength="128" size="40"></td>
</tr>
<tr><td><input type="submit" value="ok" /></td> </tr>
</table>
</form>
Servlet - ratePromoCodes
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
RateCode_ rc = (RateCode_) req.getAttribute("user");
Enumeration an = req.getAttributeNames();
Enumeration pn = req.getParameterNames();
Object o = null;
while (an.hasMoreElements()) {
o = an.nextElement();
System.out.println(o);
}
while (pn.hasMoreElements()) {
o = pn.nextElement();
System.out.println(o);
}
}
RateCode.java (javaBean)
public class RateCode_ {
private String code ;
private String description;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
OriginalL'auteur Ravi Parekh | 2011-02-17
Vous devez vous connecter pour publier un commentaire.
Vous semblez méconnaître le travail et le but de
jsp:useBean
.Tout d'abord, vous avez déclaré la fève à être dans la portée de session et vous êtes le remplir avec tous les paramètres de la requête courante.
Ce bean est donc stockée en tant que session attribut avec le nom
user
. Vous avez besoin de récupérer dans la servlet comme attribut de session, non pas comme attribut de la demande.(
user
est un terrible et déroutant nom de l'attribut par le chemin, j'avais renommerrateCode
ou quelque chose, sans que cette étrange_
à la fin)Cependant, il contiendra rien. Le
getCode()
etgetDescription()
sera de retournull
. Le<jsp:setProperty>
a à savoir pas remplie avec tous les paramètres de la demande encore à ce point que vous tentez d'y accéder dans la servlet. Elle ne peut le faire que lorsque vous envoyez la requête contenant les paramètres à partir de la page JSP. Cependant, cela a lieu au-delà de la logique métier dans la servlet.Vous avez besoin de les rassembler comme les paramètres de la demande vous-même. Première se débarrasser de toute
<jsp:useBean>
chose dans la page JSP et procédez comme suit dans la servletdoPost()
méthode:et puis vous pouvez y accéder dans la page JSP comme ci-dessous:
(ce n'est sensible qu'à Les attaques XSS, vous souhaitez l'installer JSTL et l'utilisation
fn:escapeXml
)Non, vous ne pas besoin
<jsp:useBean>
en JSP. De le garder, il n'a pratiquement aucune valeur lorsque vous êtes en utilisant l'architecture MVC (niveau 2) approche réelle de servlets. Le<jsp:useBean>
est seulement utile pour le MV de conception MVC (niveau 1). Pour enregistrer le code réutilisable de la collecte des paramètres de la demande, pensez à utiliser un framework MVC ou Apache Commons BeanUtils. Voir aussi ci-dessous des liens pour des conseils.Voir aussi:
action="forward.jsp"
de l'avant.jsp<jsp:useBean id="user" class="com.data.RateCode" scope="request"/> <jsp:setProperty name="user" property="*" /> <jsp:forward page="/code" />
et que je meRateCode_ user = request.getAttribute("rateCode")
mais comment faire pour remplir de Haricots RateCode sans une autre jsp (de l'avant.jsp) donc je n'ai pas de getParameter un par un, tout comme nous le faisons dans struts. dois-je utiliser seulement JSP, servlet.Comme expliqué dans la réponse, ne pas utiliser
jsp:useBean
. Le remplir dans la servlet.mais comment? comme yor dit.
req.getParameter("code")
est-il possible de remplir le haricot b'coz j'ai donc beaucoup de champs d'entrée dans les jsp. Merci pour le u r support.Non, cela fonctionne dans les deux. Mais il n'a pas de sens lorsque vous êtes à l'aide de servlets. Il est utile dans la base/de démarreur servletless JSP-seulement webapps. Vous avez seulement besoin de comprendre son cycle de vie. Il n'offre pas de moyen de contrôle de la demande/réponse. Seuls les pré/post-traitement des données et rien d'autre. Vous pourriez hack dans un getter qui ne fait les affaires de la méthode d'action et renvoie le résultat, mais c'est laid. Une servlet vous propose une méthode propre pour le contrôle de requête/réponse et invoquer des actions. Si votre seul but est de peupler les haricots dans une servlet, vérifiez communes BeanUtils ou tout simplement utiliser un framework MVC comme JSF.
voir aussi: stackoverflow.com/questions/5096454/... et stackoverflow.com/questions/3541077/...
OriginalL'auteur BalusC
Le problème (et sa solution) est comme suit:
Vous créez une demande portée de haricots
user
mais une fois que la page est chargée, la demande n'est pas terminée et disparu - pas étonnant, il estnull
dans la prochaine demande qui lui est complètement étranger à celui-ci. Ce que vous avez probablement voulu faire est la suivante:1) Retirez le
<jsp:useBean ...>
à partir de votre page jsp complètement de sorte qu'il présentera comme suit:2) le formulaire maintenant redirige vers une autre page jsp, le transitaire. Il semble comme suit:
Ce qu'il fait: il crée le bean dans le champ d'application request - la demande qui a soumis la forme. Puis il remplit les propriétés du bean avec les données de la forme et enfin vers l'avant (DANS une MÊME DEMANDE, VOICI LE POINT de) de la servlet, qui fait un peu de travail.
3) Enfin faire quelque chose dans votre servlet, je l'ai fait pour des fins de test:
scope="session", serait également donner NULLE alors qu'elle est en SESSION.
Le point est que si vous voulez que le haricot pour avoir des propriétés définies selon la forme de valeurs saisies-vous devez appeler <jsp:useBean> une fois que le formulaire a été soumis. Il travaillera avec l'étendue de session si vous allez directement à la Servlet, MAIS 1) Vous devez utiliser à la demande.getSession().getAttribute("utilisateur") 2) Notez que si vous mettez le <jsp:useBean> dans ta page de formulaire de la fève essaiera d'obtenir une densité de population de chargement de la page lorsque le formulaire est vide. Donc, comme résultat le bean ne sera pas la valeur null dans la servlet mais les propriétés ne va pas se mettre.
oui u r droit, j'ai essayé cette demande.getSession().getAttribute("utilisateur"), j'ai trouvé "utilisateur" mais les valeurs de code & description est NULLE
pour cela, nous devons ajouter un autre jsp pour l'avant de chaque page, et si l'erreur de validation vient tout formulaire html sera vide et l'utilisateur d'avoir à le remplir à nouveau. est aussi un moyen de le garder peuplée dans le même jsp. voici le lien, mais en utilisant de l'avant et d'une autre jsp. [lien] javaworld.com/jw-03-2000/jw-0331-ssj-forms.html?page=3
OriginalL'auteur Jan Zyka
Vous utilisez une demande d'étendue de bean dans une JSP. Cette JSP est soumis et une Servlet répond.
Lorsque la Servlet est exécutée, un nouveau "cycle de vie" commence et la demande-champ d'application ne contient pas de toute demande d'étendue de fèves utilisées dans le JSP.
Vous devez déposer la fève de propriétés comme les paramètres de la demande, et de les lire un par un dans la servlet.
OriginalL'auteur frm