这看起来应该很简单,但我没有感觉。
我有一个执行长时间运行的服务器端任务(10-15 秒)的 JSF CommandButton。我已经看到按钮上下文在单击后发生变化的形式(按钮上的标签发生变化并且按钮在处理完成之前被禁用)。
我正在使用ICEFaces 并且在底层页面代码上将disabled 属性设置为布尔值。
绑定到按钮的动作侦听器会更改该布尔值以禁用它,但遗憾的是,JSP 上没有任何更改。
任何人?
我在faces-config.xml 中定义了以下导航规则。我能够导航到第二页,但是从第二页到第一页,我无法导航。可能是什么原因,导航规则有问题?我想在没有重定向的情况下进行导航。
JSF 版本是 1.1
<navigation-rule>
<from-view-id>/first.jspx</from-view-id>
<navigation-case>
<from-action>#{bean.setSelectedItem}</from-action>
<from-outcome>form1</from-outcome>
<to-view-id>/second.jspx</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/second.jspx</from-view-id>
<navigation-case>
<from-action>#{bean2.testBack}</from-action>
<from-outcome>form2</from-outcome>
<to-view-id>/first.jspx</to-view-id>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
从萤火虫我可以看到以下异常
java.lang.RuntimeException: no message available
Run Code Online (Sandbox Code Playgroud)
谢谢
更新 1
我的 second.jspx 中的代码返回到 first.jspx
<ice:form id="form2">
<ice:commandLink action="#{bean.testBack}">
<h:outputText value="Test" />
</ice:commandLink>
</ice:form>
Run Code Online (Sandbox Code Playgroud)
单击操作时的代码
public String testBack() {
try {
logger.info("invoked");
} catch (Exception e) {
e.printStackTrace();
}
return "form2";
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
java.lang.RuntimeException: no message available
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:173)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)
at …Run Code Online (Sandbox Code Playgroud) 我有一个使用 convertDateTime 的 JSF 日期组件,它接受“12/12/2013ab”
支持 bean 返回“12/12/2013”作为日期
我可以知道如何防止用户输入“12/12/2013ab”。12/1a/2013 会提示错误。
使用jQuery,我们这样做:
$(document).ready(function() {
$("#orderedlist").append("Please rate: ");
});
Run Code Online (Sandbox Code Playgroud)
和de string附加到具有id orderedlist的组件.
使用icefaces框架,我得到了一个id为form1的组件:p我尝试使用以下代码访问它:
jQuery.noConflict();
jQuery("#form1:p").append("Please rate: ");
Run Code Online (Sandbox Code Playgroud)
字符串附加到form1而不是id为form1:p的指定组件
我希望将列表中的项目设置为 icefaces 中的 selectonemenu。但是当我做同样的事情时,我得到以下错误: java.lang.ClassCastException: cannot be cast to javax.faces.model.SelectItem
是一个实体类。
请帮忙。
请原谅我的头衔,这是我最近有限的大脑最好能够提出的.
所以,我有一个字符串列表,如[abc,def,ghi].
问题:在JSF中,我如何迭代列表并创建一个看起来像这个"abc,def,ghi"的字符串(注意逗号)?
对于那些有冲动告诉我我最好使用Java方法来连接字符串的人,请听一下:列表中的每个成员都应该作为单独的commandLink呈现.
如果普通的JSF看起来像:
<h:commandLink>abc</h:commandLink>, <h:commandLink>def</h:commandLink>, <h:commandLink>ghi</h:commandLink>
Run Code Online (Sandbox Code Playgroud) 这是使用枚举时使用<c:when>的问题的后续问题
按照接受的答案提出建议后,我遇到了另一个问题.使用库函数部分生成实际图像路径(我的代码是示例代码)以获得主题图像路径.请理解我不允许透露真实的代码,所以当我在这里发帖时我必须剪掉很多东西.
第一个问题是h:graphicImage使用当前portlet的路径自动为img标签生成绝对图像路径.示例:我需要http://myserver/mytheme/portlet/image.gif但如果我使用<h:graphicsImage value="#{myNs:getThemePath()}image.gif" />它会呈现为http:// myserver/myportlet /mytheme/portlet/image.gif; 相反,使用<img src="#{myNs:getThemePath()}image.gif" />完美.
正如在另一个问题中所指出的,我需要根据ICEFaces表中迭代项的条件在图像之间切换,并且我还需要(出于可访问性的原因)alt使用本地化资源放置正确的属性.
简而言之,我的代码类似于以下(ice:dataTable省略)
<h:column>
<f:facet name="header">
<ice:outputText value="#{myNs:getLocale('state')}" />
</f:facet>
<img alt="[[TODO]]" src="#{myNs:getThemePath()}#{item.state == 'COMPLETED' ? 'ok' : 'ko'}.gif"
</h:column>
Run Code Online (Sandbox Code Playgroud)
src部分有效,但现在出现了问题.
如果我使用alt="#myNs:getLocale('prefix.#{item.state = 'COMPLETED' ? 'completed' : 'canceled'}')}我不能嵌套表达式(它不会被评估)
如果我<h:graphicsImage为这两种情况创建两个标签(不需要使用复杂的表达式alt)并使用rendered另一个问题的接受答案中描述的属性,我不会正确呈现图像URL.
我也不能使用<c:when标签,因为正如另一个问题所解释的那样,它总是被评估为假.
我能做些什么来满足这两个要求?如何<img根据我的条件使用两个标签并切换渲染?
谢谢
[add]幸运的是,在组合表达式时,我在Tomcat日志上收到以下异常消息.有人可以帮我更好地学习EL表达吗?我是JSF的新手
Caused by: org.apache.el.parser.ParseException: Encountered "#" at line 1, column 32. …Run Code Online (Sandbox Code Playgroud) 我有一个关于造型Icefaces的问题.我有一个可以使用Icefaces组件的最小应用程序,但是当我使用它们并查看页面时,组件没有样式化(例如按钮具有默认外观,并且选项卡看不到所有,没有图像,没有).我想知道为什么这是我应该做的,所以我会得到默认的Icefaces看起来工作.
接下来我没有得到的是如何通过更改一些自动应用于组件的默认css样式类来自定义外观,因此我使用的每个组件都会获得更改的样式.
谢谢您的回答!
我们的数据库中有数值,表示两值状态.当然,这将完全匹配布尔值,但oracle没有这样的数据类型.数据库中的NUMBER(1,0)类型与Java中的java.lang.Short类型匹配(有时它们使用NUMBER(*,0)来表示与java.math.BigDecimal匹配的布尔值).
由于它在某种程度上是显而易见的,我想在视图中提供ice:selectBooleanCheckbox作为值表示,向用户提供UIComponent.(我使用IceFaces作为JSF实现)
由于某些指定JSF的人认为总是将ice的值:selectBooleanCheckbox或JSF h:selectBooleanCheckbox与模型中的布尔值匹配是显而易见的,因此组件的渲染器永远不会调用任何转换器,即使您指定了一个: 问题在java.net上讨论过
因此我尝试了以下方法:
我创建了一个转换器来在UIComponent中指定它:
public class BooleanBigDecimalConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String str) {
if (StringUtils.isEmptyString(str)) {
return new BigDecimal(0);
}
if (str.equals("true")) {
return new BigDecimal(1);
} else {
return new BigDecimal(0);
}
}
public String getAsString(FacesContext context, UIComponent component, Object obj) {
if (obj != null) {
String str = obj.toString();
if (str.equalsIgnoreCase("1")
|| str.equalsIgnoreCase("yes")
|| str.equalsIgnoreCase("true")
|| str.equalsIgnoreCase("on")) {
return "true";
} else {
return "false";
}
}
return …Run Code Online (Sandbox Code Playgroud) 我<h:selectBooleanCheckbox>在DataTable的facet头中使用a.该<h:column>DataTable的所有行内容都是<h:selectBooleanCheckbox>.行按照我想要的方式完美选择.以下是我使用的代码:
<h:form>
<h:dataTable
value="#{employeeService.employeeList }"
var="empl"
binding="#{employeeService.dataTablebinding }">
......
......
......
<h:column>
<f:facet name="header">
<h:selectBooleanCheckbox id="chkBoxAll" value="#{employeeService.checkedHdr }" valueChangeListener="#{employeeService.checkAll }" onclick="submit()"></h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox id="tableChkBox" value="#{empl.checked }" valueChangeListener="#{employeeService.getCheckChanged }" onclick="submit()"></h:selectBooleanCheckbox>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
这是以下代码ValueChangeListener:
public void checkAll(ValueChangeEvent event){
if(isInvokeApplicationPhase(event)){
Iterator<Employee> empl = employeeList.iterator();
while(empl.hasNext()){
Employee emp = empl.next();
emp.setChecked(checkedHdr);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是isInvokeApplicationPhase我为实现此代码而添加的实用程序(参考BalusC此链接中建议的解决方案:JSF 1.2:valueChangeListener事件未返回新选择的值):
public boolean isInvokeApplicationPhase(FacesEvent event){
if(event.getPhaseId() != PhaseId.INVOKE_APPLICATION){
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
event.queue();
return false;
}
return true; …Run Code Online (Sandbox Code Playgroud)