新居雅行(msyk@msyk.net)
このページは、著書である「WebObjectsワークブック」に関わることを中心に、WebObjectsやOpenBase Internationalについての情報をお届けするものです。
OpenBase 7.0.13の状況を記載しておきます。日本語テキストファイルのインポートで、きれいには動いてはくれませんので、以下のように作業をしてください。これで、データベースにテキストファイルは読み込まれます。
ご購入いただける場合は、こちらから(楽天ブックスで購入されると送料は無料です)。
訂正
| p.85のリスト | エンコードも含めて以下のように入力してください。p.86に図があるのでそちらをごらんいただいて正しく入力された方もいらっしゃるかと思いますが、エンコードは「Shift_JIS」にするのが多分いちばん素直かと思います。
public void takeValuesFromRequest(WORequest aRequest, WOContext aContent) { このソースをコピーしてペーストする場合、インデントの部分でスペーサを使っていますので、必要に応じて編集をしてください。あるいは、以下のプログラム紹介部分をごらんください。 |
以前にも、ときどき、ソースに間違いがあると指摘いただいていたのですが、個人的には「そんなはずはない」とずっと思い込んでいました。というのは、実はこの書籍を制作するとき、校正を見てプログラムソースがほとんど使い物にならないレイアウトになっていたんで、全部、横幅を指定してもらって、テキストファイルで入稿しなおしています。しかも、Project Builderで直してコンパイルをかけてチェックしたものから、コピー&ペーストしているので、「間違えているはずはない」と思い込んでいたのでした。
ただ、時間がないとかの理由で、ソースを全部差し替えた後にチェックをしていないのも事実で、これはうかつでした。ただ、それでも混乱するだろうと思って、最後の手段として、以下のように、ソースコードをすべてテキストでお見せして、場合によってはコピペできるようにするためのページも用意していたのですが、まったく活用されないままここまで来ました。編集担当者はすでに広文社にはいないので、おそらく確実に同社のページからリンクされることはないと思うので、こちらで公開をします。
この本ですが、もともとは、オンラインマガジンのMDOnlineでの記事を書籍化するという話で進めていたのですが、ある程度作業が進んだところで出版社側から最終的に出版をするという確約がもらえなかったため、作業を止めていました。ところが、いきなり1,2週間以内に原稿をもらえないと出版できないというような話になって大騒ぎで原稿をまとめたという経緯もあります。そのため、校正をちゃんと見る時間がなかったのも事実です。いろいろご迷惑をおかけしますが、ご理解ください。
また、間違っているとご指摘いただくのは大変助かるのですが、できれば、何ページに間違いがあるのかということを的確にご指示いただければと思います。よろしくお願いします。
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
public class Application extends WOApplication {
public static void main(String argv[]) {
WOApplication.main(argv, Application.class);
}
public Application() {
super();
System.out.println("Welcome to " + this.name() + "!");
/* ** Put your application initialization code here ** */
}
public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) {
aRequest.setDefaultFormValueEncoding("SJIS");
aRequest.setFormValueEncodingDetectionEnabled(true);
super.takeValuesFromRequest(aRequest, aContext);
}
public void appendToResponse(WOResponse aResponse, WOContext aContext) {
aResponse.setContentEncoding("SJIS");
super.appendToResponse(aResponse, aContext);
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
public class Application extends WOApplication {
public static void main(String argv[]) {
WOApplication.main(argv, Application.class);
}
public Application() {
super();
System.out.println("Welcome to " + this.name() + "!");
/* ** Put your application initialization code here ** */
}
public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) {
aRequest.setDefaultFormValueEncoding("SJIS");
aRequest.setFormValueEncodingDetectionEnabled(true);
super.takeValuesFromRequest(aRequest, aContext);
}
public void appendToResponse(WOResponse aResponse, WOContext aContext) {
aResponse.setContentEncoding("SJIS");
super.appendToResponse(aResponse, aContext);
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class Main extends WOComponent {
protected WODisplayGroup personaladdressDisplayGroup;
/** @TypeInfo Personaladdress */
protected EOEnterpriseObject addressKey;
public Main(WOContext context) {
super(context);
}
public InputPage moveInputPage()
{
InputPage nextPage = (InputPage)pageWithName("InputPage");
session().defaultEditingContext().revert();
personaladdressDisplayGroup.insert();
nextPage.setAddressKey(
(EOEnterpriseObject)personaladdressDisplayGroup.selectedObject());
return nextPage; } }
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class InputPage extends WOComponent {
/** @TypeInfo Personaladdress */
protected EOEnterpriseObject addressKey;
public InputPage(WOContext context) {
super(context);
}
public void setAddressKey(EOEnterpriseObject newAddressKey)
{
addressKey = newAddressKey;
}
public Main submitAction()
{
session().defaultEditingContext().saveChanges();
Main nextPage = (Main)pageWithName("Main");
// Initialize your component here
return nextPage;
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
public class Application extends WOApplication {
public static void main(String argv[]) {
WOApplication.main(argv, Application.class);
}
public Application() {
super();
System.out.println("Welcome to " + this.name() + "!");
/* ** Put your application initialization code here ** */
}
public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) {
aRequest.setDefaultFormValueEncoding("Shift_JIS");
aRequest.setFormValueEncodingDetectionEnabled(true);
super.takeValuesFromRequest(aRequest, aContext);
}
public void appendToResponse(WOResponse aResponse, WOContext aContext) {
aResponse.setContentEncoding("SJIS");
super.appendToResponse(aResponse, aContext);
aResponse.setHeader("text/html; charset=UTF-8", "content-type");
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class Main extends WOComponent {
protected WODisplayGroup dgBoard;
protected Board aBoard;
protected boolean deleting;
protected String strDeletePass;
/** @TypeInfo Message */
protected NSArray arrayResult;
protected Message itemMessage;
protected String keyString;
public Main(WOContext context) {
super(context);
session().defaultEditingContext().revert();
refetch();
deleting = false;
}
public MessageListPage actionMessageListPage()
{
MessageListPage nextPage = (MessageListPage)pageWithName("MessageListPage");
nextPage.setBoard(aBoard);
return nextPage;
}
public Board aBoard()
{
return aBoard;
}
public void setABoard(Board newABoard)
{
aBoard = newABoard;
}
public WOComponent actionDelete()
{
session().defaultEditingContext().revert(); deleting = true; dgBoard.setSelectedObject(aBoard);
return null;
}
public boolean deleting()
{
return deleting;
}
public void setDeleting(boolean newDeleting)
{
deleting = newDeleting;
}
public String strDeletePass()
{
return strDeletePass;
}
public void setStrDeletePass(String newStrDeletePass)
{
strDeletePass = newStrDeletePass;
}
public WOComponent actionEnterPass()
{
try {
String pass = (String)((EOEnterpriseObject)dgBoard.selectedObject()).valueForKey("password");
if(strDeletePass != null && strDeletePass.equals(pass)) {
dgBoard.delete();
session().defaultEditingContext().saveChanges();
deleting = false;
}
}
catch (Exception ex) {
System.out.println("Main.actionEnterPass : " + ex.toString());
}
return null;
}
public WOComponent actionPassCancel()
{
deleting = false; session().defaultEditingContext().revert();
return null;
}
public boolean hasResult()
{
return arrayResult != null && arrayResult.count() > 0;
}
/** @TypeInfo Message */
public NSArray arrayResult()
{
return arrayResult;
}
public void setArrayResult(NSArray newArrayResult)
{
arrayResult = newArrayResult;
}
public Message itemMessage()
{
return itemMessage;
}
public void setItemMessage(Message newItemMessage)
{
itemMessage = newItemMessage;
}
public String keyString()
{
return keyString;
}
public void setKeyString(String newKeyString)
{
keyString = newKeyString;
}
public WOComponent actionSearch()
{
if (keyString != null) {
String str = "*" + keyString + "*";
EOQualifier qual = EOQualifier.qualifierWithQualifierFormat("message like %@", new NSArray(str));
EOSortOrdering sort = EOSortOrdering.sortOrderingWithKey("updated", EOSortOrdering.CompareAscending);
EOFetchSpecification fs = new EOFetchSpecification("Message", qual, new NSArray(sort));
arrayResult = session().defaultEditingContext().objectsWithFetchSpecification(fs);
}
return null;
}
public boolean inserting()
{
return session().defaultEditingContext().insertedObjects().count() > 0;
}
public WOComponent actionInsert()
{
deleting = false; session().defaultEditingContext().revert(); dgBoard.insert();
return null;
}
public WOComponent actionCancelInsert()
{
session().defaultEditingContext().revert(); refetch();
return null;
}
public WOComponent actionSaveInsertion()
{
Board eo = (Board)dgBoard.selectedObject();
if (eo != null && eo.boardName() != null && eo.boardOwner() != null && eo.password() != null) {
NSTimestamp now = new NSTimestamp();
eo.setCreated(now);
eo.setUpdated(now);
try {
session().defaultEditingContext().saveChanges();
refetch();
}
catch (Exception ex) {
System.out.println("Main.actionSaveInsertion : " + ex.toString());
}
}
return null; }
private void refetch() {
dgBoard.fetch();
dgBoard.updateDisplayedObjects();
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class MessagePage extends WOComponent {
protected Message newMessage;
protected boolean isDelete;
protected String strKey;
protected Message itemMessage;
public MessagePage(WOContext context) {
super(context);
}
public Message newMessage()
{
return newMessage;
}
public void setNewMessage(Message newNewMessage)
{
newMessage = newNewMessage;
}
public MessageListPage actionSubmit()
{
try {
newMessage.setUpdated(new NSTimestamp());
session().defaultEditingContext().saveChanges();
}
catch (Exception ex) {
debugString(ex.toString());
return null;
}
MessageListPage nextPage = (MessageListPage)pageWithName("MessageListPage");
nextPage.setBoard(newMessage.eoBoard());
return nextPage;
}
public MessageListPage actionAbort()
{
session().defaultEditingContext().revert();
MessageListPage nextPage = (MessageListPage)pageWithName("MessageListPage");
nextPage.setBoard(newMessage.eoBoard());
return nextPage;
}
public boolean isDelete()
{
return isDelete;
}
public void setIsDelete(boolean newIsDelete)
{
isDelete = newIsDelete;
}
public MessageListPage actionDelete()
{
MessageListPage page = null;
try {
if (strKey.equals(newMessage.password()) || strKey.equals("kesiteyaru")) {
Board board = newMessage.eoBoard();
session().defaultEditingContext().revert();
session().defaultEditingContext().deleteObject(newMessage);
session().defaultEditingContext().saveChanges();
page = (MessageListPage)pageWithName("MessageListPage");
page.setBoard(board);
}
else {
strKey = "cannot delete";
}
}
catch (Exception ex) {
debugString(ex.toString());
page = null;
}
return page;
}
public String strKey()
{
return strKey;
}
public void setStrKey(String newStrKey)
{
strKey = newStrKey;
}
public void setMessageForDelete(Message value)
{
isDelete = true;
newMessage = value;
}
public Message itemMessage()
{
return itemMessage;
}
public void setItemMessage(Message newItemMessage)
{
itemMessage = newItemMessage;
}
public WOComponent actionInsert()
{
return null;
}
}
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class MessageListPage extends WOComponent {
protected WODisplayGroup dgMessage;
protected Message aMessage;
protected Board board;
public MessageListPage(WOContext context) {
super(context);
}
public Message aMessage()
{
return aMessage;
}
public void setAMessage(Message newAMessage)
{
aMessage = newAMessage;
}
public Main actionMain()
{
Main nextPage = (Main)pageWithName("Main");
// Initialize your component here
return nextPage;
}
public MessagePage actionNewMessage()
{
MessagePage nextPage = (MessagePage)pageWithName("MessagePage");
session().defaultEditingContext().revert(); dgMessage.insert(); nextPage.setNewMessage((Message)dgMessage.selectedObject());
return nextPage;
}
public MessagePage actionDelete()
{
MessagePage nextPage = (MessagePage)pageWithName("MessagePage");
session().defaultEditingContext().revert(); nextPage = setMessageForDelete(aMessage);
return nextPage; }
public Board board()
{
return board;
}
public void setBoard(Board newBoard)
{
board = newBoard;
dgMessage.setQualifier(EOQualifier.qualifierWithQualifierFormat("eoParent = null", null));
dgMessage.setMasterObject(newBoard);
dgMessage.fetch();
dgMessage.updateDisplayedObjects();
} }
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class OneMessageBox extends WOComponent {
protected Message aMessage;
protected Message aComment;
protected WODisplayGroup dgMessage;
public OneMessageBox(WOContext context) {
super(context);
}
public Message aMessage()
{
return aMessage;
}
public void setAMessage(Message newAMessage)
{
aMessage = newAMessage;
}
public Message aComment()
{
return aComment;
}
public void setAComment(Message newAComment)
{
aComment = newAComment;
}
public WODisplayGroup dgMessage()
{
return dgMessage;
}
public void setDgMessage(WODisplayGroup newDgMessage)
{
dgMessage = newDgMessage;
}
public MessagePage actionComment()
{
MessagePage nextPage = (MessagePage)pageWithName("MessagePage");
String strTitle = aMessage.title();
String strMessage = aMessage.message();
session().defaultEditingContext().revert();
dgMessage.insert();
Message commentMessage = (Message)dgMessage.selectedObject();
if ( strTitle != null )
commentMessage.setTitle("re: "+ strTitle);
if ( strMessage != null ) {
NSArray lines = NSArray.componentsSeparatedByString(strMessage, "\n");
commentMessage.setMessage("> " + lines.componentsJoinedByString("\n> "));
}
aMessage.addObjectToBothSidesOfRelationshipWithKey(commentMessage, "arrayComment");
nextPage.setNewMessage(commentMessage);
return nextPage; } }