java - jsf 托管 bean 中的 JSF inputText 和 session

标签 java jsp jsf

我想知道如何从托管 bean 中读取输入文本的值。 我知道可以这样阅读,而且非常直接。

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

但是如果让我说我有一个像

这样的值呢?
 <h:inputText id="username" value="some_value" required="true" />

我想在我的托管 bean 中读取这个“some_value”。 可能吗?

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

最佳答案

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

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

<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();

但是,除了违反 model-view-presenter 契约之外,您还会遇到一些实际问题。参数键可能不是“用户名”,但可能类似于“j_id_jsp_115874224_691:username”,这取决于您是否使组件成为任何 NamingContainer 的子组件。 s(如 UIForm - 请参阅 prependId attribute )或者 View 是否已命名空间。在任何地方硬编码这个值可能不是一个好主意。您可以阅读 JSF 组件 ID 和呈现的 HTML ID 之间的关系 here .如果你想使用 UIComponent.getClientId要生成 key ,您将返回到组件绑定(bind),因为您需要获取对组件的引用。

Another question is it possible to access to the session variables in managed bean..?

参见 ExternalContext.getSessionMap .

关于java - jsf 托管 bean 中的 JSF inputText 和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/905194/

相关文章:

java - 使用 JavaPoet 生成一个字段作为匿名类

java - 使用 jsp、servlet 和 ajax 发表评论

java - 在jsp页面中用java控制文本

jsp - JSF 与普通的 JSP + Beans?

ajax - JSF:使用 multipart/form-data 和 AJAX 时出现奇怪的 iframe

jsf - 无法解析表达式 [#{myCartController.cartView == 'RETAIL_PRICE_GROSS' and fn :endsWith(myCartController. class.name ,'.CartController' )}]

java - 更新 JWS 部署的应用程序的数据文档

java - 使用Optaplanner解决VRPTWPD

java - 使用 gradle 的应用程序出现错误 "Native method not found"

jsf - SelectOneMenu 中的 PrimeFaces 和可见自动完成