我不明白PrimeFaces选择器(PFS)是如何工作的.
<h:outputText value="#{bean.text1}" styleClass="myClass" />
<p:commandButton update="@(.myClass)" />
Run Code Online (Sandbox Code Playgroud)
我可以用它.我认为这是一个很棒的工具,虽然它并不总是对我有用.的.myClass是客户端jQuery选择.服务器端的JSF如何知道要更新的内容?
我可以理解正常的JSF ID选择器是如何工作的.
<h:outputText value="#{bean.text1}" id="textId" />
<p:commandButton update="textId" />
Run Code Online (Sandbox Code Playgroud)
的textId组件树的引用部件的ID作为在XHTML文件中定义在服务器端.所以我可以理解JSF如何找到合适的组件.
但是如果使用的是primefaces选择器,则使用客户端jQuery选择器.JSF如何知道哪个组件必须更新?有时我的PFS有问题.它似乎并不总是对我有用.如果您使用PFS,是否应该记住哪些内容?
我想根据用户访问权限限制对某些JSF页面的访问.如何在JSF中做到这一点?我找到了两个链接:通过直接更改JSF中的URL来限制用户访问页面.但答案没有提到如何阻止访问页面.用response.sendError?第二个链接:JSF:如何控制JSF中的访问权限和权限?
还有什么最好使用PhaseListener或使用ServletFilter?
Mojara 2.1.21
我根据评论更新了我的问题.我有两种情况,组件绑定到服务器会话bean.(附加链接信息:绑定属性导致在视图中找到重复的组件ID,并且/sf/answers/875887071/)
版本1:
single.xhtml:
<h:outputText value=... binding="#{mysessionbean.out}" />
Run Code Online (Sandbox Code Playgroud)
Java的:
@SessionScoped @Named public class Mysessionbean {
UIOutput out;
//getter and setter ....
}
Run Code Online (Sandbox Code Playgroud)
版本2:
所引用:
<h:outputText value=... binding="#{mysessionbean.out}"
Run Code Online (Sandbox Code Playgroud)
view1.xhtml:
<ui:composition template="template.xhtml" />
Run Code Online (Sandbox Code Playgroud)
view2.xhtml:
<ui:composition template="template.xhtml" />
Run Code Online (Sandbox Code Playgroud)
Java的:
@SessionScoped @Named public class Mysessionbean {
UIOutput out;
//getter and setter ....
}
Run Code Online (Sandbox Code Playgroud)
版本1没问题.(至少我到目前为止没有遇到任何错误).但是在版本2中,如果我从一个页面导航到另一个页面,则会出现重复ID错误.为什么会这样?使用(请求范围的)组件(在版本1中)与会话作用域绑定是否安全?还有其他用例需要考虑吗?
编辑: 功能要求1:
我想在视图中使用Primefaces数据表.我需要来自这个数据表的一些信息.(例如选定的行或行索引).因此绑定数据表有助于我检索此信息.
功能要求2:
组件在复合组件中的绑定.它们将绑定到会话范围的bean.(主要用在一个页面上,但是如果我在另一个页面上使用它会怎么样?
要求3
"版本2"中的情况.带有primefaces菜单和会话作用域绑定的模板.为此,我使用了EL-Binding.
我很好奇JSF是如何知道单击按钮的,有一些动作,甚至可以使用参数调用动作监听器.我可以想象服务器会注意到状态和EL并调用方法.
例1:
<form>
<p:commandButton actionListener="{bean.do_something(bean.info)}" />
</form>
Run Code Online (Sandbox Code Playgroud)
例2:
<form>
<h:datatable values=... var="myvar">
<h:column>
<p:commandButton actionListener="{bean.do_something(myvar.info)}" />
</h:column>
</h:datatable>
</form>
Run Code Online (Sandbox Code Playgroud) 为什么java中静态成员的顺序很重要?
例如
public class A {
static int i= 1;
static int c = i;
int a = c; <<------ ok
}
Run Code Online (Sandbox Code Playgroud)
与
public class B {
int a = c; <<--- compile error
static int c = 1;
static int i = c;
}
Run Code Online (Sandbox Code Playgroud)
为什么Java的设计使得这种排序有所不同?(我根据ykaganovich的回答编辑了我的问题)
编辑:谢谢大家的帮助!我用非静态变量测试了我的例子.它具有完全相同的行为,因此静态不起任何作用.这个问题具有误导性(至少对我而言).我会尝试总结你的答案.
编辑2:
我会尝试总结答案.欲了解更多信息,请阅读下面的答案:)
a)Java中的直接前向引用:
static int i = c;
static int c = 1;
Run Code Online (Sandbox Code Playgroud)
很混乱.所以在Java中不允许这样做.主要原因是初始化顺序.
b)Java中允许间接前向引用
public class Test {
int i = c();
int c() { return c; }
int c …Run Code Online (Sandbox Code Playgroud) 我有以下课程:
public class MyMap extends HashMap {
public MyMap () { }
some more methods...
}
@SessionScoped
public ProducerClass implements Serializable {
@Produces @MyItem HashMap<A,B> produceItems () { }
}
@Named
public ConsumerClass {
@Inject @MyItem HashMap<A,B> property;
}
@Retention(RUNTIME)
public @interface MyItem {
}
Run Code Online (Sandbox Code Playgroud)
我在MyMap和HashMap表单的ConsumerClass中得到错误的模糊注入点.
怎么会这样 ?我认为注入类是通过@MyItem注释给出的唯一.
EL语句在c:forEach循环中的视图构建时间内会发生什么。
<c:forEach var="v" values="#{bean.values}">
<p:inputText value="#{v.name}" />
</c:forEach>
class Bean {
public List<Pojo> getValues();
}
class Pojo {
public void setName (String);
public String getName();
}
Run Code Online (Sandbox Code Playgroud)
此代码将如何评估渲染?至:
<p:inputText value="John Smith">
Run Code Online (Sandbox Code Playgroud)
要么
<p:inputText value="#{pojo.name}" >
Run Code Online (Sandbox Code Playgroud)