【问题标题】:JSF 2.0; MyFaces; Form submit only with POSTJSF 2.0;我的脸;仅使用 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。

非常感谢!

【问题讨论】:

    标签: jsf post jsf-2 get servlet-filters


    【解决方案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.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2011-12-26
      相关资源
      最近更新 更多