代码之家  ›  专栏  ›  技术社区  ›  Dmitris

JSF管理bean中的JSF输入文本和会话

  •  3
  • Dmitris  · 技术社区  · 17 年前

    我想知道如何从托管bean中读取输入文本的值。 我知道这样读是有可能的,而且它非常引人注目。

    <h:inputText id="username" value="#{mylogin.username}" required="true" />
    

    但是如果说我有一个像

     <h:inputText id="username" value="some_value" required="true" />
    

    我想在我的托管bean中阅读这个“一些价值”。 有可能吗?

    另一个问题是是否可以访问托管bean中的会话变量,或者我应该以某种方式将它们传递到那里?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Adeel Ansari    17 年前

    在后一种情况下, some_value 不是bean管理的,imho。尽管如此,你还是可以读到。像这样做,

    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletRequest request =
          (HttpServletRequest)ctx.getExternalContext().getRequest(); 
    request.getParameter("username");
    

    同样,关于访问会话变量,

    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletRequest request =
          (HttpServletRequest)ctx.getExternalContext().getSession(false); 
    
        2
  •  3
  •   Community Mohan Dere    9 年前
    <h:inputText id="username" value="#{mylogin.username}" required="true" />
    

    在我看来,这是最好的办法。你有什么理由不想这样做吗?你可以,因为 harto suggests ,使用组件绑定,但是(正如醋指出的那样)您从这种方法中一无所获。

    <h:inputText id="username" value="some_value" required="true" />
    

    如果要读取上述值,可以直接从请求参数中读取。这个 ExternalContext 封装底层容器API,可以在托管bean中访问,如下所示:

    FacesContext facesContext = FacesContext
        .getCurrentInstance();
    ExternalContext extContext = facesContext
        .getExternalContext();
    Map<String, String> params = extContext
        .getRequestParameterMap();
    

    但是,除了违反模型视图演示者契约之外,您还可能遇到一些实际问题。参数键可能不是“username”,但可能类似于“j_id_jsp_115874224_691:username”,这取决于是否将组件设置为 NamingContainer S(类) UIForm -见 prependId attribute )或者如果视图有名称空间。在任何地方硬编码这个值可能是个坏主意。您可以阅读JSF组件ID和呈现的HTML ID之间的关系。 here . 如果你想用 UIComponent.getClientId 要生成键,您将返回到组件绑定,因为您需要获取对组件的引用。

    另一个问题是是否可以访问托管bean中的会话变量….?

    ExternalContext.getSessionMap .

        3
  •  2
  •   harto    17 年前

    读取组件值的常见方法是在托管bean中创建到组件的绑定,并从中读取值。

    例如:

    <h:inputText id="username" value="some_value" required="true"
        binding="#{mylogin.usernameField}" />
    

    然后,在托管bean中:

    private UIInput usernameField;
    
    public void setUsernameField(UIInput usernameField) { 
        this.usernameField = usernameField;
    }
    public UIInput getUsernameField() { 
        return usernameField; 
    }
    

    最后,要访问字段值:

    Object value = usernameField.getValue();
    
    推荐文章