にキャストすることはできません、私は、JSPファイル内にフォームを介してユーザからの2つの値を取っています:java.lang.Stringでは私のプログラムではjava.util.Listに
- コンテンツの
- 名前を人(ポスター)
フォームのアクション属性はサーブレットを呼び出します。 EntryクラスとPersistenceManagerFactoryの助けを借りたサーブレットは、JDOを使用してデータストア内のオブジェクトを永続化し、JSPにリダイレクトします。 JSPは、その人物の名前とともにコンテンツを照会して印刷します。
"content"にはStringデータ型を使用できません。これは、1500バイトまでの値を取ることができ、私の要件はそれ以上です。
"Text"データ型を使用しようとしましたが、索引付けされていないため問合せにNULL値が示されました。ここで
、私は、リスト内の値を取得しようとしていますが、それはエラーを示しています
java.lang.String cannot be cast to java.util.List
は、これは正しい方法ですか私は値が大きいほど、より1500バイトを取ることが可能な他の方法がありますJSPからクエリを実行してユーザに表示しますか?
サーブレットファイル:
package com.pack;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class LoginServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
List<String> content = new ArrayList<String>();
content.add(request.getParameter("content"));
String poster = request.getParameter("poster");
Entry entry = new Entry(content, poster);
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(entry);
pm.close();
response.sendRedirect("login.jsp");
}
}
エントリークラス:
package com.pack;
import java.util.List;
import javax.jdo.annotations.*;
import com.google.appengine.api.datastore.Key;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Entry {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String poster;
@Persistent
private List<String> content;
public Entry() {
}
public Key getKey() {
return key;
}
public Entry(List<String> content, String poster) {
this.content = content;
this.poster = poster;
}
public List<String> getContent() {
return content;
}
public String getPoster() {
return poster;
}
}
JSPファイル:
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="javax.jdo.PersistenceManager"%>
<%@ page import="javax.jdo.Query"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="com.pack.*"%>
<%@ page import="com.google.appengine.api.datastore.Text" %>
<html>
<head>
<style>
.entryList {
margin-left: 1100px;
margin-top: -325px;
overflow-y: scroll;
height: 630px;
}
</style>
</head>
<h1>Welcome</h1>
<div class="entry">
<form action="/LoginServlet" method="post">
Comments:<br> <br>
<textarea rows="4" cols="50" name="content">
</textarea>
<br> <br> Your name:<br> <br> <input name="poster"
type="text" value=""><br> <br> <input type="submit"
value="Post"> <br> <br>
</form>
</div>
<div class="entryList">
<h2>Updates</h2>
<%
List<Entry> entries = new ArrayList<Entry>();
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery("SELECT FROM " + Entry.class.getName());
entries = (List<Entry>) query.execute();
%>
<%
if (entries.isEmpty()) {
%>
No entries
<%
} else {
%>
<%
for (Entry e : entries) {
%>
<%=e.getContent()%>
<br> posted by
<%=e.getPoster()%>
<br> <br>
<%
}
}
%>
</div>
</html>
完全なスタックトレースを投稿してください。野生の推測をしなければならない場合、Persistenceフレームワークは、データベースから取得されたList値を持つパブリックEntry(Stringコンテンツ)コンストラクタを呼び出してエラーを出しています。あなたがなぜこのコンストラクタを持っているのか分かりません。繰り返しますが、スタックトレースが役立ちます。 –
'Entry(String content){}'コンストラクタを削除しました。とにかく、私は問題を解決しました。 App Engineのデータストアの "Text"データ型を使用し、JSPで印刷するときに、 '<%= e.getContent()>の代わりに' <%= e.getContent()。getValue()%> 'を使用しました。これは、ユーザーが入力した大きなコンテンツ全体の値を表示します。 –
@PrakharSaxenaこの同じ問題が発生している可能性のあるコミュニティメンバーに役立つソリューションとして、ソリューションを投稿することをお勧めします。 – Jordan