【问题标题】:add user entered data to database using jsf使用jsf将用户输入的数据添加到数据库
【发布时间】:2011-05-05 10:03:54
【问题描述】:

由于我是 JSF 框架的新手,想知道如何将用户输入的数据添加到数据库中。 更清楚的是,我将 jsf 与 jsp 一起使用,我的 jsp 包含一些输入字段和一个提交按钮。我如何捕获所有用户输入的数据并将其作为按钮的输入参数发送,因为我的后端将所有这些作为输入参数并使用新记录更新表。

请查看我的代码,让我知道我的错误

Registration.jsp

<body>
 <f:view>
  <h:form>
           <h:panelGrid columns="2" rules="all" width="100%" style="background:#03547C;color:#FDD017">
                <h:column>
                    <h:outputText value="Stu No : "></h:outputText>
                    <h:inputText value="#{RegBean.stuNo}"/>
                </h:column>
                <h:column>
                    <h:outputText value="Stu Name : "></h:outputText>
                    <h:inputText value="#{RegBean.stuName}"/>
                </h:column>
                 <h:column>
                      <h:outputText value="Standard : "></h:outputText>
                      <h:inputText value="#{RegBean.standard}" />
                 </h:column>
                 <h:column>
                       <h:outputText value="School : "></h:outputText>
                       <h:inputText value="#{RegBean.school}" />
                 </h:column>
            </h:panelGrid>
            <h:panelGrid columns="2" rules="all" width="100%" style="background:#03547C;color:#FDD017">
                <h:column>
                    <h:form>
                        <h:commandButton id="submitBtn" value="Submit" action="#{RegBean.submitDetails}">
                            <f:param name="sNo" value="#{RegBean.stuNo}" />
                            <f:param name="sName" value="#{RegBean.stuName}" />
                            <f:param name="std" value="#{RegBean.standard}" />
                            <f:param name="schl" value="#{RegBean.school}" />
                        </h:commandButton>
                    </h:form>
                </h:column>
            </h:panelGrid>
        </h:form>
    </f:view>
</body>

注册 Bean

public class VendorRegBean {
private String stuNo;
private String stuName;
private String standard;
private String school;

  // getters and setters

    public void submitDetails() {
    Map requestMap = context.getExternalContext().getRequestParameterMap();
      String stNo = (String) requestMap.get("sNo");
      String stName = (String) requestMap.get("sName");
      String stndrd = (String) requestMap.get("std");
      String scl = (String) requestMap.get("schl");
    vReg.stuRegistration(stNo ,stName ,stndrd ,scl );        
}

}

【问题讨论】:

  • Oracle 提供了整个 JEE6 软件堆栈。不幸的是,Oracle 强迫您使用 Glassfish 3.1(JEE6 参考实现),但您不必设置它,只需安装二进制文件。然后将 [root]/glassfish3/glassfish/lib/javaee.jar 放入您的构建或类路径中。它包含 JSF 开发所需的一切。标记

标签: jsf-2


【解决方案1】:

只要将 bean 注册为托管 bean 并为 bean 成员提供 getter 和 setter 方法,就不需要从请求参数映射中获取参数。

为您的 bean 使用注解将其声明为托管 bean。为stuNo 成员提供了getter 和setter 示例:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

    @ManagedBean
    @SessionScoped
    public class RegBean {
      private String stuNo;
      ...


      private String getStuNo() {
        return stuNo;
      }

      private String setStuNo(String stuNo) {
        this.stuNod = stuNo;
      }
    }

在视图中你必须引用首字母小写的托管bean,例如:

<h:inputText value="#{regBean.stuNo}"/>

您的命令按钮不需要&lt;f:param&gt;,只需使用:

<h:commandButton id="submitBtn" value="Submit" action="#{regBean.submitDetails}"/>

那么所有参数都会自动在您的submitDetails 方法中可用,您不需要从参数映射中获取它们。

【讨论】:

  • 你能给我推荐一个包含 javax.faces.bean.* 的 jar 文件吗?因为当我没有相关的库文件时,我也没有在谷歌上找到它......请帮助我找到相应的 jar 文件
  • 您需要 jsf-api.jarjs-impl.jar (例如来自 Mojarra] 但因为您使用的是 jsf 标签您应该已经将它们放在您的类路径中,还是我遗漏了什么?
  • 我的类路径中有这 2 个罐子,但我仍然无法使用 javax.faces.bean.*;这是我的疑问....也非常感谢上述答案,我不知道参数是直接可用的。
  • 你能否建议我如何在相同的上下文中生成一个弹出窗口...一旦我的数据库用用户输入的数据更新,我想显示一个显示“注册成功”的弹出窗口并显示一个reg ID(来自数据库)
猜你喜欢
  • 2018-07-15
  • 2023-03-24
  • 2017-12-28
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2017-05-12
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多