【问题标题】:Java EE and struts and JSP: java form population - action bean etcJava EE and struts and JSP: java form population - action bean 等
【发布时间】:2011-06-21 05:46:00
【问题描述】:

大家好。

问题-

在 /member/cvUpload 中填充 nl.strohalm.cyclos.controls.cv.CvUploadForm@317bdd 时出错 javax.servlet.ServletException: BeanUtils.populate

我正在开发一个开源 wep 应用程序,并尝试通过添加新功能来自学一些技能。

现在 Web 应用程序被称为 cyclos 并使用 - Java EE、Struts、Hibernate、JSP、Tiles-def(spring、MySql JavaScript)设置:控件、DAO、服务、实体等。

我正在尝试添加新功能,例如 CV 数据库,以便用户保存模板和文件。

我的示例 JSP 表单如下所示:

<ssl:form method="post" action="/member/cvUpload" enctype="multipart/form-data">
<html:hidden property="id" />
<html:hidden property="owner" />
<html:hidden property="uploadDate" />

<table class="defaultTableContent" cellspacing="0" cellpadding="0">
    <tr>
        <td class="tdHeaderTable">TITLE HERE PLEASE !!!></td>

    </tr>
    <tr>
        <td colspan="2" align="left" class="tdContentTableLists">
            <table class="defaultTable">
                <tr>
                    <th class="tdHeaderContents" width="30%"> CV Upload -> needs properties copy / ref !!!</th>
                    <th class="tdHeaderContents" width="60%">&nbsp;</th>
                </tr>
                <tr>
                    <td>Notes </td>
                    <td><cyclos:richTextArea name="notes"  styleId="descriptionText"/></td>
                </tr>
                <tr>
                    <td>Address</td>
                    <td><html:text value="address" size="25" property="address" /><br>
                        <html:text value="address" size="25" property="address2" />
                        <html:text value="address" size="25" property="address3" />
                    </td>
                </tr>
                <tr>
                    <td>Phone Number</td>
                    <td><html:text value="0791 000 000" size="15" property="phoneNumber"/></td>
                </tr>
                <tr>
                    <td>Field of interest / industry</td>
                    <td><c:forEach var="industry" items="${industries}">
                            <label>
                                <html:radio property="industry" value="${industry}" styleClass="radio" /><bean:message key="cv.industries.${industry}" />
                            </label>
                            </c:forEach>
                    </td>
                </tr>
                <tr>
                    <td>CV upload</td>
                    <td><html:file property="cvContent" /></td>
                </tr>
                <tr>
                    <td>
                        <input type="submit" id="saveButton"  value="<bean:message key="global.submit"/>" align="center">
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

我的 java 表单由 struts 填充,或者看起来如下:

public class CvUploadForm extends BaseBindingForm {

private Long                id;
@IndexedEmbedded(depth = 4)
private Member              owner;
// private Calendar                       creationDate;
// private Member                         memberId;
private FormFile                cvContent;
private Calendar            uploadDate;
private long                memberId;

public CvUploadForm() {
}

public CvUploadForm(Long id, Member owner, FormFile cvContent, Calendar uploadDate) {
    this.id = id;
    this.owner = owner;
    this.cvContent = cvContent;
    this.uploadDate = uploadDate;

}

public Map<String, Object> getCv() {
    return values;
}
public void setCv(final Map<String, Object> map) {
    values = map;
}

public void setCv(final String key, final Object value) {
    values.put(key, value);
}

// ++ 获取器和设置器 ++

// ==============================================

现在我可以显示我的模板,但我的提交不起作用 -> 我想了解我的输出窗口中显示的问题/错误! (见顶部和以下错误)

显示的下一个错误如下:

原因:java.lang.IllegalArgumentException:无法调用 nl.strohalm.cyclos.controls.cv.CvUploadForm.setOwner - 参数类型不匹配

加上几个错误。 (所有者 ov cv 引用不同的成员表作为 ID - 使用 java 枚举 - 关系...获取

非常感谢任何回复!我对设置进行了一些澄清。我以为我只能使用表单在 JSP 上显示位,并使用 CV.java 实体文件进行映射等。 .所以我在获取所有文件和正确连接以及理解这里的错误时有点迷失

感谢您的回复,如果您需要更多信息,请告诉我。 亚历克斯

【问题讨论】:

    标签: java hibernate jsp struts dao


    【解决方案1】:

    您必须查看它尝试传递给 setOwner 方法的对象类型。它不是 Member 类型的对象。

    使用您的调试器并尝试查看要通过的内容。

    【讨论】:

    • 我不熟悉这一切,也不确定要使用什么调试器(ps:我使用 NetBeans) - 我正在使用名为 getWriteDataBinders 的方法注册活页夹。我有一个读取 CV context.getForm 的方法, - 数据绑定器有一行供所有者使用,如下所示:
    • "binder.registerBinder("owner", PropertyBinder.instance(Member.class, "owner", ReferenceConverter.instance(Member.class)));"
    • 如果您知道此类问题的调试器,请告诉我!首先感谢您的好评!
    • 只需使用 Debug 而不是 run 以便在调试模式下运行您的应用程序。右键单击您的 netbeans 项目,您将 c 调试。您可以做的另一件事是将方法 setOwner(Member meber) 更改为 setOwner(Object member) 以查看它尝试传递的对象类型。您将在 setOwner 方法中设置断点。
    • 谢谢,我将不得不更多地使用那个调试器。 .我从未有过的purling - 似乎是一个有用的复杂工具,需要一点习惯。谢谢!还没有解决这个问题,但现在可以解决这个问题!谢谢
    【解决方案2】:

    你应该精确它是 Struts 1 还是 struts 2。 struts 1 将属性映射到 actionForm ,如果是这种情况,您应该在表单操作中使用原始类型(而不是像成员这样的对象)。 Struts 2 使用 OGNL 将复杂对象映射到它们的特定 bean。

    这是我关于 stack over flow 的第一篇文章,希望对您有所帮助。

    【讨论】:

    • 很高兴知道,就我而言,它是 1.3.8 -> 我对它完全陌生,并且了解现有功能的工作方式。想一想,表单通常很短,并且不包括 JSP 上的所有字段 -> 那么表单的用途是什么?谢谢你的回复!!
    • 基本上我有表单、实体和动作类!不要忘记 DAO 和服务文件。 .显示似乎很好,按下提交时我遇到了几个问题。 .
    • 在 Struts 1 中,每个动作都有它的核心动作形式,因为我知道你应该在动作形式中放入原始类型,例如 (int, string...) 然后你在相应的动作中做一些商业逻辑使您的复杂对象像 Member ----> actionForm 必须包含诸如 memberName ...而不是 MemberObject 之类的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2015-02-26
    • 2014-10-01
    • 2014-12-12
    相关资源
    最近更新 更多