JSF 2.0;我的脸;仅使用 POST 提交表单

Posted

技术标签:

【中文标题】JSF 2.0;我的脸;仅使用 POST 提交表单【英文标题】:JSF 2.0; MyFaces; Form submit only with POST 【发布时间】:2012-07-31 03:13:12 【问题描述】:

我有一个安全问题,但我不知道如何在 JSF 中执行此操作。 在 php 中,我可以对定义为 POST 的表单提交做出反应,我只想通过 POST 获取值,因此无法通过 GET 从同名字段获取值。

示例: 表单中的字段名:用户名 在我的 PHP 站点中,我可以通过$_POST["username"] 获取值,但不能通过$_GET["username"] 获取值,因为我没有实现 GET 方式,只有 POST。

所以,现在我也想在我的 JSF 网站中使用它。 问题是,我不能只为所有请求实现 POST,我还必须对 GET 做出反应。 我只希望我的表单数据将通过 POST 发送到我的 bean,而不是通过 GET。

我怎样才能做到这一点? 用过滤器还是别的什么? 为了您的兴趣:我无法在我的应用程序中使用 javascript

非常感谢!

【问题讨论】:

【参考方案1】:

我不确定我是否理解您的问题,但如果您只需要检查是否使用 POST 或 GET 调用了支持 bean 上的方法,您可以从 HttpServletRequest 对象中获取该信息,如下所示:

  @ManagedBean(name="myBean")
  @ViewScoped
  public class MyMBean implements Serializable



    public void handleForm()

        HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();

        if(req.getMethod().equalsIgnoreCase("POST"))

            //Handle your form data
        
    

【讨论】:

看起来很完美!谢谢 :-) 我会试试你的解决方案! 这是一种笨拙的方式。通常,每当您需要从 JSF 支持 bean 中的 javax.servlet.* 包中导入某些内容时,很有可能会有更好、更多 JSF 风格的方法来实现相同目的,或者您实际上不应该使用JSF 支持 bean。你需要三思而后行。【参考方案2】:

只需检查FacesContext#isPostback()

if (FacesContext.getCurrentInstance().isPostback()) 
    // It's a JSF POST request.

【讨论】:

以上是关于JSF 2.0;我的脸;仅使用 POST 提交表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 2.0 中使用表单重新呈现页面的一部分?

JSF 2.2 多部分表单未提交[重复]

使用 JSF 2.0 实现重定向登录的正确方法是啥?

JSF 2.0将动态表单保存到数据库[重复]

JSF 2.0在bean(或页面?)之间传递数据

JSF 2.0 和多次提交问题