2013-04-20, 01:37
  #1
Medlem
Jag har en HTML kod. När jag trycker på en viss länk så jag skickas till en servlet, den biten fungerar.

Nu vill jag ha värdera på attributen i HTML sidan, men får bara nullpointer.

Jsp sidan:

Kod:
<section id="posts">
	<h2>Posts:</h2>
	<ul>
		<c:forEach var="post" items="${posts}">
			<div style="background-color:#98D9EA;">
				<form action="<%= contextPath %>/Start" method="POST" id="posttitle">
				     <a href="#" onclick="document.getElementById('posttitle').submit()"><font size="5"><b><c:out value="${post.title}"/></b></font><br></a>
				</form>
				<c:out value="${post.text}"/><br>
				<font size="2"><i>Posted by <c:out value="${post.author}"/>.</i></font><br>
			</div>
			<br>
		</c:forEach>
	</ul>
</section>
posts är en arraylist som innehåller massa Post-objekt är en java-böna som helt enkelt lagrar strängar.

Servleten:

Kod:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
	
		String action = request.getParameter("action"); //action är alltid null

Min fråga är nu hur jag kan skicka var="post" till servleten?
__________________
Senast redigerad av Un-named 2013-04-20 kl. 02:22.
Citera
2013-04-20, 08:34
  #2
Moderator
Protons avatar
Webbutveckling och javascript --> Java
/Moderator
Citera
2013-04-20, 08:36
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av Un-named
Jag har en HTML kod. När jag trycker på en viss länk så jag skickas till en servlet, den biten fungerar.

Nu vill jag ha värdera på attributen i HTML sidan, men får bara nullpointer.

Jsp sidan:

Kod:
<section id="posts">
	<h2>Posts:</h2>
	<ul>
		<c:forEach var="post" items="${posts}">
			<div style="background-color:#98D9EA;">
				<form action="<%= contextPath %>/Start" method="POST" id="posttitle">
				     <a href="#" onclick="document.getElementById('posttitle').submit()"><font size="5"><b><c:out value="${post.title}"/></b></font><br></a>
				</form>
				<c:out value="${post.text}"/><br>
				<font size="2"><i>Posted by <c:out value="${post.author}"/>.</i></font><br>
			</div>
			<br>
		</c:forEach>
	</ul>
</section>
posts är en arraylist som innehåller massa Post-objekt är en java-böna som helt enkelt lagrar strängar.

Servleten:

Kod:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
	
		String action = request.getParameter("action"); //action är alltid null

Min fråga är nu hur jag kan skicka var="post" till servleten?
Du har ju inget som heter action i din form, därför blir den null.

Om du kollar på den html som spottas ut, vad får du ut där?
Citera
2013-04-20, 14:53
  #4
Medlem
Jag får även null när jag skriver String action = request.getParameter("posts");

Hur kommer det sig?
Citera
2013-04-20, 16:38
  #5
Medlem
Löste probemet. Jag bytte ut hyperlänken mot en knapp(en ful lösning men har ont om tid).
Har stött på ett annat problem dock.

Kod:
<section id="posts">
	<form action="<%= contextPath %>/Start" method="POST">
		<h2>Posts:</h2>
		<ul>
			<c:forEach var="post" items="${posts}">
				<div style="background-color:#98D9EA;">
					<font size="5"><b><c:out value="${post.title}"/></b></font><br>
					<c:out value="${post.text}"/><br>
					<font size="2"><i>Posted by <c:out value="${post.author}"/>.</i></font>
					<p><input value="View Comments" type="submit"><input type="hidden" name="action" value="viewPost"></p>
				</div>
				<br>
			</c:forEach>
		</ul>
	</form>
</section>

Jag trycker på submit knappen och skickas till servleten. Det fungerar bra hit tills.

Kod:
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{	
		String action = request.getParameter("action");
		
		if(action.equals("addPost"))
		{
			...		
		}
		else if(action.equals("viewPost"))
		{
			Object obj = request.getAttribute("post");
			
			System.out.println(obj == null);            //Denna blir alltid true
			System.out.println(obj instanceof Post); //Denna blir alltid false.
		}

request.getAttribute("post") returnerar alltid null.
Återigen, hur får jag tillgång till "post" objektet som skapas i for each loopen(i HTML koden)?
Citera
2013-04-20, 19:52
  #6
Medlem
MrRedmans avatar
Citat:
Ursprungligen postat av Un-named
Löste probemet. Jag bytte ut hyperlänken mot en knapp(en ful lösning men har ont om tid).
Har stött på ett annat problem dock.

Kod:
<section id="posts">
	<form action="<%= contextPath %>/Start" method="POST">
		<h2>Posts:</h2>
		<ul>
			<c:forEach var="post" items="${posts}">
				<div style="background-color:#98D9EA;">
					<font size="5"><b><c:out value="${post.title}"/></b></font><br>
					<c:out value="${post.text}"/><br>
					<font size="2"><i>Posted by <c:out value="${post.author}"/>.</i></font>
					<p><input value="View Comments" type="submit"><input type="hidden" name="action" value="viewPost"></p>
				</div>
				<br>
			</c:forEach>
		</ul>
	</form>
</section>

Jag trycker på submit knappen och skickas till servleten. Det fungerar bra hit tills.

Kod:
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{	
		String action = request.getParameter("action");
		
		if(action.equals("addPost"))
		{
			...		
		}
		else if(action.equals("viewPost"))
		{
			Object obj = request.getAttribute("post");
			
			System.out.println(obj == null);            //Denna blir alltid true
			System.out.println(obj instanceof Post); //Denna blir alltid false.
		}

request.getAttribute("post") returnerar alltid null.
Återigen, hur får jag tillgång till "post" objektet som skapas i for each loopen(i HTML koden)?

Servleten exekveras först, sedan dispatchas requesten till jsp-sidan. Så det fins inget sätt att komma åt variabler skapade på sidan (scriptlet, EL eller JSTL spelar ingen roll).
Ett tips är att öppna den genererade java-klassen som har skapats för jsp-sidan så kommer du nog fatta varför.
Citera
2013-04-21, 01:10
  #7
Medlem
Citat:
Ursprungligen postat av MrRedman
Servleten exekveras först, sedan dispatchas requesten till jsp-sidan. Så det fins inget sätt att komma åt variabler skapade på sidan (scriptlet, EL eller JSTL spelar ingen roll).
Ett tips är att öppna den genererade java-klassen som har skapats för jsp-sidan så kommer du nog fatta varför.
Hur gör jag de?
Citera
2013-04-21, 07:49
  #8
Medlem
MrRedmans avatar
Citat:
Ursprungligen postat av Un-named
Hur gör jag de?

De flesta containers har en katalog som heter generated, leta där. Annars kan du ju alltid prova att söka efter *.java så kanske du hittar dom. Kom ihåg att du måste requesta jsp sidan först så att den skapas, om du inte deklarerat precompile ja tack.
Citera
2013-04-21, 09:09
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av Un-named
Jag får även null när jag skriver String action = request.getParameter("posts");

Hur kommer det sig?
Återigen, kolla i din genererade HTML. Har du en kontroll däri som heter post som du skickar med till din servlet. Om du inte har det är det ju inte så svårt att lista ut var felet sitter, right?

Som tidigare sagts kommer du från din servlet inte kunna komma åt kod som exekveras i din jsp-sida, inte utan att från denna spara undan saker i sessionen eller databasen eller nån annanstans. Blir du tvungen att göra sådana fula saker har du dock tänkt fel nån annanstans.
Citera
2013-04-21, 09:15
  #10
Medlem
MrRedmans avatar
Citat:
Ursprungligen postat av Proton
Återigen, kolla i din genererade HTML. Har du en kontroll däri som heter post som du skickar med till din servlet. Om du inte har det är det ju inte så svårt att lista ut var felet sitter, right?

Som tidigare sagts kommer du från din servlet inte kunna komma åt kod som exekveras i din jsp-sida, inte utan att från denna spara undan saker i sessionen eller databasen eller nån annanstans. Blir du tvungen att göra sådana fula saker har du dock tänkt fel nån annanstans.


Servleten är controller som tar fram modellen till vyn.
Citera
2013-04-21, 09:20
  #11
Moderator
Protons avatar
Citat:
Ursprungligen postat av MrRedman
Servleten är controller som tar fram modellen till vyn.
Jo, men det den här killen ville ha var ju som jag förstog det att få tag på något i jsp-sidan när den exekverades, och få in detta något i sin servlet, speciellt eftersom han i servleten tar emot något från anropet.

Det är fortfarande svårt att ta emot något från anropet som inte finns i anropet i första läget.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in