问题标签 [viewparams]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsf - 如何在 JSF 支持 bean 之间共享实体?
我想模块化我的 JSF 2.1 / Java EE 应用程序。我有一个由几个模块组成的页面。每个模块都应该使用一个单独的 JSF 支持 bean。其中一些模块需要显示和更改来自/在同一实体上的一些数据。
我已经尝试了一些方法,但到目前为止我并不满意。我问自己最好的方法是什么?
所有模块都使用相同的实体,如果某些数据已更改,它们(可能)需要通知其他支持 bean。
对我已经尝试过的一些方法的评论:
- 通过接口将实体传递给我的组件(XHTML)也不会将它传递给支持 bean
- 通常不鼓励通过从请求参数中读取 id 在 bean 的 postContruct 方法中加载实体,而建议使用“viewParam”方法
- 恕我直言,使用“viewParam”不如在创建 bean 之后拥有实体(在我的 postConstruct 中)。我不确定何时调用 bean 的 setter。
jsf-2 - f:viewParam 上的必需标志不会阻止调用 preRenderView
我的一些 viewParams 是强制性的,当它们丢失时会显示 FacesMessage。但是系统事件 preRenderView 是在搜索参数为空的情况下执行的,因此返回了默认的数据结果。有没有办法阻止 preRenderView 注册的方法在违反所需属性时被执行?
jsf - f:param 未传递参数或未设置参数
我使用h:link
withincludeViewParams=true
在我的列表和查看页面之间导航,并使查看页面 URL 可收藏,但它不起作用。以下是我的代码的相关部分:
在 layout.xhtml (我的模板)中:
在 Articles.xhtml(我的列表页面)中:
在 View_Article.xhtml(我的查看详情页面)中:
更多信息:我使用 JSF 2.2、ocpsoft 重写过滤器、primefaces 库,并且ArticleController.java
是会话范围的。
我尝试了以下方法:
1- 我用过h:commandLink
;有了这个,导航工作,但 URL 不包含视图参数
文章.xhtml:
ArticleController.java: ...
我希望 URL 是,http://localhost:8080/testApp/en/View_Article?id=1
但它就像`http://localhost:8080/testApp/en/View_Article
2-我插入http://localhost:8080/testApp/en/View_Article?id=1
并且它在两种情况下都有效。
jsf-2 - “#{rolebean.roleId}”:目标不可达,标识符“roleBean”解析为空
这是我的 xhtml
这是我的代码
在这里,我试图将 id 作为参数传递给下一页,它应该根据该 id 检索值。当我将 bean id 作为参数传递给下一页时,出现错误
“#{rolebean.roleId}”:目标不可达,标识符“roleBean”解析为空
这是我携带到下一个 xhtml 的第一个 xhtml 页面的列中的值
jsf-2 - 通过同名 f:viewParam 绑定使用来自 f:param 的值更新 Bean
使用此代码:
当我使用 commandLink 提交时,viewParam(在调试中看到)使用来自 UPDATE_MODEL 阶段的 f:param 的值更新 myBean.aParameter。
这是正常的吗?
是的,我知道 viewParam 和 param 具有相同的名称,对此我别无选择。
我使用 Mojarra 2.1.27
jsf - includeViewParams=true 将空模型值转换为查询字符串中的空字符串
给定<p:selectOneMenu>
如下。
对应的托管 bean:
指示的参数<f:viewParam>
是可选的。例如,使用如下 URL 访问页面。
https://localhost:8181/Project-war/private_resources/Test.jsf
由于id
是一个可选参数,一个空参数附加到 URL(当语言从 更改时<p:selectOneMenu>
),以防它如下所示。
https://localhost:8181/Project-war/private_resources/Test.jsf?id=
这不应该发生。如果未提供空参数并且 URL 应与第一个类似,则不应附加空参数。
有没有办法防止空参数在未传递时附加到 URL 中?
这仅与<f:viewParam>
-指定的转换器相关联javax.faces.Long
。
如果删除此转换器,则不会将参数附加到 URL,以防不提供任何参数。
尽管完全没有必要指定此处演示的转换器,但我有如下所示的转换器,可将id
通过 URL 作为查询字符串参数传递的数据转换为 JPA 实体。
现在需要明确指定此转换器<f:viewParam>
,如下所示。
并且关联的托管 bean 需要进行如下更改。
jsf - 仅在页面加载时处理 f:viewParam
我正在使用 an<f:viewParam>
来传递参数,如下所示。
是否可以处理这个<f:viewParam>
,只有在页面加载/刷新时?
只是因为用 指定的转换器<f:viewParam>
将通过查询字符串传递的值转换为 JPA 实体的成本很高。因此,它涉及昂贵的数据库事务,即使在使用诸如 之类的组件进行ajaxical<p:commandButton>
回发时也是如此,<p:commandLink>
这是不必要的。
因此,例如,当单击<p:commandLink>
(ajaxical)时,不应执行昂贵的业务服务(在转换器中)。这可以做到吗?
rendered
当属性被评估为facesContext.postback
likerendered="#{not facesContext.postback}"
但属性rendered
未记录时,这以某种方式起作用(尽管如此奇怪)。因此,它是不可靠的。
jsf - 将多个视图参数传递给具有复合主键的实体的转换器
如何为具有复合主键的实体编写转换器?
我想使用 URl 编辑实体,例如 `\edit_representative.xhtml?emp_id=12345&project_id=45
我正在使用 Omnifaces,所以我对单个主键有类似的东西
但我如何将员工正在处理的 project_id 传递给转换器
编辑
根据 BalusC 的回答,我使用了第二个选项,并在我的projectRepConverter
转换器中有以下内容
在小脸上
jsf - 忽略 viewParam 的 @NotNull Bean 验证
问题
我正在尝试验证强制性 GET 请求参数。
在视图中,我添加了相应的 viewParam 标记。
我的 CDI bean 看起来像这样
当我使用以下请求时,验证工作正常并显示预期的验证消息。
但是,当我通过删除参数 customerId 更改请求时,将跳过验证并且不显示任何消息。
有没有办法让它按预期工作?
解决方法
我已将 viewParam 声明更改为
该更新版本适用于第二个请求。无论如何,我更喜欢使用 bean 验证。
我的设置
- 莫哈拉 JSF 2.2.7
- 焊接 2.2.1.Final
- 休眠验证器 5.1.1.Final
- 雄猫 7.0.54
web.xml
ajax - SelectOneMenu 标记中的 PrimeFaces Ajax 侦听器不适用于 viewParam
我尝试使用 selectOneMenu ajax 侦听器,但当我的页面接收参数时它不起作用。
在我的测试中,我使用了 PrimeFaces ShowCase 页面中显示的相同示例,但我的页面也通过 viewParam 和 viewAction 接收参数。
第一次更改 selectOneMenu 时,会触发动作侦听器,然后停止工作。
我的页面:
还有豆子:
重要的:
如果我取出元数据、viewParam 和 viewAction 标记并用 @PostConstruct 标记 init() 方法,那么该示例可以完美运行,但我需要 page 参数。
我请你帮忙解决它。