规格: TOMCAT10,焊接来自jboss的-libraries
过程:尝试(CDI)从输入文本插入到纯简单JSP页面的
<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如下所示
@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?
领导:无帖子可在万维网上公开(谷歌/雅虎.)
关于卡蒂克
发布于 2022-01-26 08:30:41
为什么InputText注入不传递给pojo?
因为这不是由CDI完成的。
您基本上忘记创建如下所示的servlet:
@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);
}
}您只需按以下方式调整表单和提交按钮:
<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攻击。
另请参阅:
https://stackoverflow.com/questions/70840340
复制相似问题