如何根据java中下拉列表或单选按钮的选择添加textArea?

时间:2014-09-21 01:01:34

标签: java dspace

我修改了dspace代码的反馈表单,添加了一个类别,用于询问用户的用户类型'。

    Select category = form.addItem().addSelect("category");
    category.setLabel("Please select your category");
    category.addOption("UG","Undergraduate/BS");
    category.addOption("MS","MS Student");
    category.addOption("PHD","PhD Student");
    category.addOption("FAC","Faculty");
    category.addOption("RES","Researcher");
    category.addOption("TRA","Trainee");
    category.addOption("BUS","Businessman/Private");
    category.addOption("FF","Fish farmer");
    category.addOption("OT","Other");

    String itemSelected = parameters.getParameter("category","");
    if (StringUtils.equals(itemSelected,"OT"))
    {
        TextArea other = form.addItem().addTextArea("other");
        other.setHelp("Write here if you selected Other");
        other.setValue(parameters.getParameter("other",""));
    }

我的目标是仅在用户选择其他时显示文字区域。此外,如果用户选择其他字段,则文本区域应为必填字段。我怎样才能做到这一点?我还想尝试使用单选按钮而不是选择。

[编辑]对于那些不熟悉DSpace的人,这里是我从DSpace github修改的原始代码:feedback form

2 个答案:

答案 0 :(得分:3)

您可以像使用选择一样使用单选按钮:

Radio category = form.addItem().addRadio("category");
category.setLabel("Please select your category");
category.addOption("UG", "Undergraduate/BS");
...

就像terrywb所说,java代码呈现页面服务器端。您可以进行两步处理,其中第一步仅提交类别。但是默认包含隐藏的TextArea然后使用javascript显示它更加用户友好。

Item item = form.addItem("item-name","hidden");
TextArea other = item.addTextArea("other");

在PageMeta中添加对javascript文件的引用:

public void addPageMeta(PageMeta pageMeta) throws SAXException,
            WingException, UIException, SQLException, IOException,
            AuthorizeException
    {       
        pageMeta.addMetadata("javascript", "static", null, true).addContent("static/js/feedbackform.js");
        // leave the rest
        ...
    }

将javascript放在/dspace/modules/xmlui/src/main/webapp/static/js/feedbackform.js中,以便可以投放。

同样parameters.getParameter("category","");无法开箱即用。 parameters实例变量包含/aspects/ArtifactBrowser/sitemap.xmap中的cocoon给它的参数:

<map:match pattern="feedback">
        <map:act type="SendFeedbackAction">
                <map:transform type="FeedbackForm">
                        <map:parameter name="comments" value="{comments}"/>
                        <map:parameter name="email" value="{email}"/>
                        <map:parameter name="page" value="{page}"/>
                </map:transform>

                <map:serialize type="xml"/>
        </map:act>
        <map:transform type="FeedbackSent"/>
        <map:serialize type="xml"/>
</map:match>

SendFeedbackAction从请求中获取数据:

Request request = ObjectModelHelper.getRequest(objectModel);
String page = request.getParameter("page");

并通过将{page}添加到它返回的地图中来提供 // Check all data is there if ((address == null) || address.equals("") || (comments == null) || comments.equals("")) { // Either the user did not fill out the form or this is the // first time they are visiting the page. Map<String,String> map = new HashMap<String,String>(); map.put("page",page); ... return map; 的值:

comment

email,{{1}}以及您希望看到的所有其他字段也是如此。 在那里也应该执行必要的字段。

答案 1 :(得分:0)

如果我是你,我会使用JTextArea而不是TextArea ......

public void valueChanged(ListSelectionEvent e) {
    if ( e.getSource() == item) { /*Item is whatever the selected choice you want is*/ ) {
        other.setVisible(true);
    } else {
        other.setVisible(false);
    }
}

确保您的类扩展了ActionListener! 那个JTextArea其他是公开的! ;)