首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat 10 ( jakarta.servlet.* )上JSP (而不是JSF )中的CDI

Tomcat 10 ( jakarta.servlet.* )上JSP (而不是JSF )中的CDI
EN

Stack Overflow用户
提问于 2022-01-24 20:51:04
回答 1查看 222关注 0票数 -2

规格: TOMCAT10,焊接来自jboss的-libraries

过程:尝试(CDI)从输入文本插入到纯简单JSP页面的

代码语言:javascript
复制
<form method="get">
  <table  width="25%" border=1>
   <tr>
   <td>Name :</td>
   <td><input type="text" maxlength="10" id="login" name="login" value="${bean.input}"/></td>
   </tr>    
   <tr>
   <td colspan=2>
   <button type="button" id="TEST" value="${bean.submit()}"   name="TEST" />TEST-CDI</button>   
   </td>
   </tr>  
   </table> 
   </form>

Pojo如下所示

代码语言:javascript
复制
@Named()
@RequestScoped
public class Bean implements java.io.Serializable {

    private String input;
    private String output;

    //Get/setters
    public String getInput() {return input;}
    public void setInput(String input) {this.input = input;}
    public String getOutput() {return output;}
    public void setOutput(String output) {this.output = output;}
    public void submit() {
        output = "Hello World! You have typed: " + input;
        System.out.println("SUBMITTED : " + output);
    }
}

O/p :提交:你好世界!您输入了: null

问:为什么InputText的注入不传递给pojo?

领导:无帖子可在万维网上公开(谷歌/雅虎.)

关于卡蒂克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 08:30:41

为什么InputText注入不传递给pojo?

因为这不是由CDI完成的。

您基本上忘记创建如下所示的servlet:

代码语言:javascript
复制
@WebServlet("/yourServlet")
public class YourServlet extends HttpServlet {

    @Inject
    private Bean bean;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        bean.setInput(request.getParameter("login"));

        if ("submit".equals(request.getParameter("action")) {
            bean.submit();
        }

        request.getRequestDispatcher("your.jsp").forward(request, response);
    }
}

您只需按以下方式调整表单和提交按钮:

代码语言:javascript
复制
<form action="${pageContext.request.contextPath}/yourServlet" method="post">
    ...
    <button type="submit" name="action" value="submit">TEST-CDI</button>
    ...
</form>

CDI基本上只在特定范围中第一次引用时自动创建bean实例,例如EL中的${bean}或某些容器托管组件(如servlet或另一个bean )中的@Inject。CDI根本不收集和设置提交的HTTP请求参数。这是servlet的责任。

请注意,当使用JSF时,整个YourServlet是不必要的,您只需要一个视图(比如那个JSP页面)和一个模型(比如那个CDI )。这就是JSF的全部要点。它附带了自己的FacesServlet,这一切都是自动完成的。它所做的甚至更多,例如(隐式)转换、验证和更重要的是防止XSS攻击。

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70840340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档