1

ビジネス オブジェクトに新しい Bean を追加しようとしています。

これを行うには、最初に、次のように割り当てて PurchaseOrderDocument クラスにメンバーを追加します。

protected String purchaseOrderCurrentCMActionStatus;

それからもちろん、通常のゲッターとセッターを次のように割り当てます。

 public String getPurchaseOrderCurrentCMActionStatus() {
    return purchaseOrderCurrentCMActionStatus;
}

public void setPurchaseOrderCurrentCMActionStatus(String purchaseOrderCurrentCMActionStatus) {
    this.purchaseOrderCurrentCMActionStatus = purchaseOrderCurrentCMActionStatus;
}

さて、それですべてが私のJavaクラスで起こっています。

そこで、DataDictionary ディレクトリにある PurchaseOrderDocument.xml という対応する XML ファイルに、次の Bean 定義を追加しました -

 <bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus"
  parent="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean"/>

    <bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean" abstract="true" parent="AttributeDefinition">
    <property name="name" value="purchaseOrderCurrentCMActionStatus"/>
    <property name="label" value="Current CM Action Status"/>
    <property name="required" value="false"/>
    <property name="shortLabel" value="CM Status"/>
    <property name="control">
       <ref bean="HiddenControl"/>
    </property>
 </bean> 

次に、OJB マッピングを作成する必要があるため、ojb.xml ファイルに次の XML コード行を追加しました。

<field-descriptor name="purchaseOrderCurrentCMActionStatus" column="CURR_CM_ACTION_STATUS" jdbc-type="VARCHAR"/>

また、対応する TABLE に列 CURR_CM_ACTION_STATUS を作成しました。そのため、名前が一致していることを 2 回、3 回チェックしました。

右 -

質問は次のとおりです。 PurchaseOrderDocument 内に、この Bean に対して上で指定した「Setter」コードを起動するイベントを待機するトリガーがあります。奇妙なことは、私が書いたこのコードが NULL ポインター例外を生成していることです。

問題を次の行に特定しました-

<bean id="PurchaseOrderDocument-purchaseOrderCurrentCMActionStatus-parentBean" abstract="true" parent="AttributeDefinition">

次の行を変更すると:

parent = "AttributeDefinition"

parent = "Note-noteText"

(注はクラスであり、noteText は、継承元のこの Bean にもともと含まれていたメンバー変数ですが、もう Note クラスから継承したくないので、PurchaseOrderDocument クラスに対してローカルにしたいのです。とにかく、そこに Note-noteText がありましたが、null ポインター例外は発生しませんでしたが、トリガーによって「set」メソッドが呼び出された後、データベースには何も書き込まれませんでした。これは偶然にも ORACLE です。)

したがって、これが継承から遠ざかる理由であり、代わりに、この Bean をこのクラスに対してローカルにする必要があります。

私の同僚は、おそらくSpringがFORMでこのBeanを探していると述べましたが、そこにないので、それを突いています...しかし、私には疑問があります。

また、HIDDEN CONTROL を使用していることにも注意してください。parent="AttributeDefinition" テキストを追加すると、コントロール属性が指定されていないというエラーが表示されました。この Bean は USER 入力からではなくコンテンツを取得するため、この HIDDEN CONTROL 属性を指定しました。

多分これは問題の一部ですか??

念のため、スタック トレースを次に示します。

スタックトレース:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process(KualiRequestProcessor.java:101)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92)
    org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:50)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:167)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:121)
    org.kuali.rice.kns.web.filter.SetResponseBufferSizeFilter.doFilter(SetResponseBufferSizeFilter.java:78)
    org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
    org.kuali.rice.kns.web.filter.SessionFilter.doFilter(SessionFilter.java:41)

根本的な原因

javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.NullPointerException
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:861)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794)
    org.apache.jsp.jsp.module.purap.PurchaseOrder_jsp._jspService(PurchaseOrder_jsp.java:269)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process(KualiRequestProcessor.java:101)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92)
    org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:50)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:167)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:121)
    org.kuali.rice.kns.web.filter.SetResponseBufferSizeFilter.doFilter(SetResponseBufferSizeFilter.java:78)
    org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
    org.kuali.rice.kns.web.filter.SessionFilter.doFilter(SessionFilter.java:41)

根本的な原因

java.lang.NullPointerException
    org.kuali.rice.kns.datadictionary.exporter.AttributesMapBuilder.buildAttributeMap(AttributesMapBuilder.java:66)
    org.kuali.rice.kns.datadictionary.exporter.AttributesMapBuilder.buildAttributesMap(AttributesMapBuilder.java:51)
    org.kuali.rice.kns.datadictionary.exporter.DocumentEntryMapper.mapEntry(DocumentEntryMapper.java:88)
    org.kuali.rice.kns.datadictionary.exporter.TransactionalDocumentEntryMapper.mapEntry(TransactionalDocumentEntryMapper.java:30)
    org.kuali.rice.kns.datadictionary.exporter.DataDictionaryMap.get(DataDictionaryMap.java:60)
    javax.el.MapELResolver.getValue(MapELResolver.java:51)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
    org.apache.jsp.tag.web.kr.documentPage_tag._jspx_meth_c_005fset_005f0(documentPage_tag.java:382)
    org.apache.jsp.tag.web.kr.documentPage_tag.doTag(documentPage_tag.java:313)
    org.apache.jsp.jsp.module.purap.PurchaseOrder_jsp._jspService(PurchaseOrder_jsp.java:260)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process(KualiRequestProcessor.java:101)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92)
    org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:50)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:167)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:121)
    org.kuali.rice.kns.web.filter.SetResponseBufferSizeFilter.doFilter(SetResponseBufferSizeFilter.java:78)
    org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
    org.kuali.rice.kns.web.filter.SessionFilter.doFilter(SessionFilter.java:41)
4

1 に答える 1

1

上記のコードは正しかったことが判明しました。

これに関する問題は、Spring Framework によって永続化されていない一時オブジェクトでセッター メソッドを呼び出していたことです。(たとえば、呼び出し元のブロックでスコープが終了するオブジェクトで呼び出していました!)

これを修正するために、スコープ内にある同じクラスの別のインスタンスでセッターを呼び出しただけです。

うーん...

生活し、学びます。

于 2012-11-02T18:15:11.487 に答える