小编Ove*_*eer的帖子

将JSF前缀更改为后缀映射会强制我重新应用CSS背景图像上的映射

我多年来一直在使用前缀映射,并决定切换到后缀映射,只是为了/faces真正摆脱url.在我挖洞之前,我只是想检查一下我是否朝着正确的方向前进,因为有一些意想不到的事情正在发生.我改变了这个:

<servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

对此:

<servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

然后我看到所有内容FacesServlet.xhtml 附加到它上面,因此浏览器正在请求background.png.xhtml文件, style.css.xhtml文件 - 这是正确的吗?我认为它被称为后缀映射,但它看起来有些凌乱,我试图说服自己这是要走的路.

在我引用URI的CSS文件中,我还必须附加.xhtml:

background-image: url(images/background.png.xhtml);
Run Code Online (Sandbox Code Playgroud)

然后我看到BalusC的一篇帖子提供了一个解决方案,可以防止资源下载而无需通过FacesServlet:

<security-constraint>
    <display-name>Restrict raw XHTML docs</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)

当我添加这个时,只有真实.xhtml文件加载到页面上,所有其他资源(尽管已经.xhtml附加)不显示.

我想知道的是:

  1. 这是否适用.xhtml于一切正常(对不起,如果这几年最愚蠢的问题)

  2. 为什么'限制原始xhtml文档'安全约束会阻止加载CSS,JavaScript和图像等资源?

感谢您的任何反馈.我在Glassfish 3.1上使用Mojarra 2.1.2.

css jsf facelets jsf-2

14
推荐指数
1
解决办法
7234
查看次数

JSF自定义组件失去了关注ajax更新的输入

我正在编写一个自动完成自定义组件作为JSF 2.1.3的学习练习.这个想法(可能非常熟悉)是输入一些文本和输入组件,并显示一个匹配值的列表框.想法是在输入上有一个keyup javascript事件,它调用jsf.ajax.request()来更新组件.到目前为止,我有一个组件,我可以包括这样:

<mycc:autocomplete id="myauto" searchMethod="#{bean.doSearch}"/>
Run Code Online (Sandbox Code Playgroud)

这会呈现这样的HTML:

<span id="myauto">
  <input type="text" id="myauto_input" name="myauto_input"
    onkeyup="com.myco.ajaxRequest(this, event)"/>
  <select id="myauto_listbox" name="myauto_listbox">
    <option value="1st">First</option>
    <option value="2nd">Second</option>
  </select>
</span>
Run Code Online (Sandbox Code Playgroud)

com.myco.ajaxRequest()javascript函数(keyup)执行此操作:

jsf.ajax.request(comp, null, {
                 execute: 'myauto',
                 render: 'myauto'
                 });
Run Code Online (Sandbox Code Playgroud)

因为我想用建议列表重建和重新呈现列表框,我重新渲染自定义组件'myauto'.通过指定execute:'myauto',decode()方法执行,我可以获取输入值.通过指定render:'myauto',执行encode ...()方法来重新生成html.

这一切都很好,但因为我正在渲染myauto_input组件的父级,所以每次keyup事件触发时都会丢失输入焦点.

如果我指定像render这样的东西:'myauto_listbox'(我真的只想重新渲染列表框)问题是编码...()方法不执行,因为它们是整个自定义组件,而不仅仅是列表框.它将在我重建包含建议的列表框的encode ...()方法之一中.

该组件扩展了UIInput,我在encodeEnd()方法中的单独渲染器(componentFamily ="javax.faces.Input")中生成标记(因此这总是在任何提供的转换器之后运行 - 尚未实现).我想强迫javascript的焦点是一个可怕的黑客,并且要避免.

我有点不确定该去哪里,但我怀疑我所看到的表明我正以某种方式以错误的方式接近这一点.如果有人能够指出我正确的方向,我会非常感激.

javascript ajax jsf custom-component

6
推荐指数
1
解决办法
3716
查看次数

带有支持bean的JSF复合组件

我试图让一个复合组件使用它自己的支持bean,使用来自Core JSF 3书的p375上的示例,但只是得到一个NPE.问题似乎是在encodeBegin()的开头,Date date =(Date)getValue()返回null.如果我老实说我真的不明白组件的值应该存储在哪里,我使用cc:attribute type =将其指定为java.util.Date,但我真的不明白这是怎么回事:public Object getSubmittedValue(){return this; - 将返回InputDateBean类的实例 - 导致Date.我一般都很好并且对这应该如何工作感到困惑.

与书籍示例不同,我正在尝试使用支持组件进行临时存储,因此当输入日期时,我会尝试将其存储在#{cc.day}中,因为他们出于某种原因使用应用程序范围的bean.

谢谢你的帮助.我正在使用Mojarra 2.1.

inputDate.xhtml

<cc:interface componentType="uk.co.myco.jsfbeans.sqcc.InputDateBean">
    <cc:attribute name="value" type="java.util.Date"/>
</cc:interface>

<cc:implementation>
    <h:panelGrid columns="3">
        <h:inputText id="day" value="#{cc.day}"
                     converter="javax.faces.Integer"/>
        <h:inputText id="month" value="#{cc.month}"
                     converter="javax.faces.Integer"/>
        <h:inputText id="year" value="#{cc.year}"
                     converter="javax.faces.Integer"/>
    </h:panelGrid>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)

InputDateBean.java

package uk.co.myco.jsfbeans.sqcc;


import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import javax.faces.component.FacesComponent;
import java.util.GregorianCalendar;
import javax.faces.application.FacesMessage;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.convert.ConverterException;
import uk.co.myco.general.SQLog;
import uk.co.myco.jsfbeans.helper.Messages;

@FacesComponent(value = "uk.co.myco.jsfbeans.sqcc.InputDateBean")
public class InputDateBean extends UIInput implements NamingContainer {

    private …
Run Code Online (Sandbox Code Playgroud)

jsf composite-component

5
推荐指数
1
解决办法
7921
查看次数

CDI/Weld - 结束对话后如何处理浏览器页面刷新?

在使用CDI的最初阶段,我使用faces-redirect = true导航到一个长时间运行的对话活动的页面,所以我有一个像..myPage.xhtml?cid = 1的URL.

在某些时候,我结束了对话,我的意思是,这必须是一个合理的事情,或者你可以使用会话范围?无论如何,我结束了对话,然后用户点击了F5,当然这会导致'找不到对话'错误,因为cid = 1不存在.

任何人都可以建议如何解决这个问题?我正在使用Steven Verborgh ViewScoped实现,只是使用会话范围的bean在页面之间传递参数.所以我有两个@ViewScoped bean,每个bean都返回第1页和第2页.我@Injected @ConversationScoped ParameterBean到两个视图范围的bean中.我在从第1页调用的action方法中启动对话(parameterBean.getConversation().begin()).在第2页的preRenderView事件中,我将parameterBean的属性引用到第2页支持bean实例变量和结束谈话,它完成了它的工作而不再需要.

除了F5问题,它工作正常.如果有人有任何建议我会很感激,希望我不会错过一些非常明显的东西.我有点假设没有摆脱重定向.

谢谢.

jsf cdi seam-conversation

5
推荐指数
1
解决办法
1353
查看次数

jquery:输入标签中的向上/向下箭头键选择了<select>项目

我知道那里有数百个类似的问题,相信我,当我说我读了很多这些问题时,但问题仍然存在.如果我有一个输入标签id ="input1"和一个select id ="list1",我想在输入组件中按下向上/向下箭头键,以相应地向上或向下移动选择列表中的选定选项.

我已设置select标记的值,以便选择选项列表中的第一项,但此代码不起作用.我已经检查了keydown事件的绑定工作正常,我已经尝试在select组件上触发keyup/keydown/keypress(所有尝试的)事件之前暂时将焦点设置到select.我是否应该专注于选择组件,然后在触发按键事件之前触发选择或更改事件?

        deflectEvent = function(event) {
            if((event.which == $.ui.keyCode.UP) ||
              (event.which == $.ui.keyCode.DOWN)) {
                //$('#list1').focus(); //.focus().click();
                $('#list1').trigger(event);
                //$('#input1').focus();
                return false;
            };
        }
        jQuery(function($){$('#input1').bind('keydown',deflectEvent)});
Run Code Online (Sandbox Code Playgroud)

我观察到的事情,是错误的,没有.在IE8上,我可以按箭头键并使用$('#list1')获得焦点移动.focus().focus().click(); 但在Chrome上,我甚至无法做到这一点.

我知道jquery模拟插件,虽然我没有设法找到它的任何使用示例.例如,如果您模拟按键事件,如何指定按下了哪个键?

谢谢.

jquery

3
推荐指数
1
解决办法
1万
查看次数