相关疑难解决方法(0)

h:commandButton/h:commandLink在第一次单击时不起作用,仅在第二次单击时起作用

我们有一个更新动态包含的ajax导航菜单.包含文件各有各自的表单.

<h:form>
    <h:commandButton value="Add" action="#{navigator.setUrl('AddUser')}">
        <f:ajax render=":propertiesArea" />
    </h:commandButton>
</h:form>
<h:panelGroup id="propertiesArea" layout="block">
    <ui:include src="#{navigator.selectedLevel.url}" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但包含文件中的任何命令按钮在第一次单击时都不起作用.它仅适用于第二次点击.

我发现这个问题commandButton/commandLink/ajax动作/监听器方法没有被调用或输入值没有更新,我的问题在第9点描述.我明白我需要明确地包含在解决它的包<h:form>中的ID <f:ajax render>.

<f:ajax render=":propertiesArea :propertiesArea:someFormId" />
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,表单ID事先是未知的.此表格最初也不会在上下文中提供.

上述方案有什么解决方案吗?

jsf commandlink jsf-2 commandbutton

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

Primefaces valueChangeListener或<p:ajax listener未针对p:selectOneMenu触发

我正在使用Primefaces 3.4.2.

我的JSF页面中有以下内容

<p:selectOneMenu id="emp" value="#{mymb.emp.employeeName}" 
        valueChangeListener="#{mymb.handleChange}" 
        required="true"
        style="width: 150px;">
    <f:selectItem noSelectionOption="true" 
            itemLabel="Please  Select"/>
    <f:selectItems value="#{mymb.employeeList}" var="emp"
            itemLabel="#{emp.employeeName}"
            itemValue="#{emp.employeeNumber}"/>
    <p:ajax update="sublist"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

并在ManagedBean中

public void handleChange(ValueChangeEvent event){  
    System.out.println("here "+event.getNewValue());
}
Run Code Online (Sandbox Code Playgroud)

问题是valueChangeListener没有触发,即handleChange方法没有被调用.我尝试了以下,但它也没有工作.

<p:ajax update="sublist"  listener="#{mymb.handleChange}" />  
Run Code Online (Sandbox Code Playgroud)

单独的JSF页面:

<ui:composition template="/templates/layout.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <ui:define name="content">
        <h:head>
        </h:head>
        <h:body>
            <h:form id="form">                      
                <p:panelGrid columns="6">
                    <h:outputLabel value="Employees" for="employees" />
                    <p:selectOneMenu id="employees"
                            value="#{mymb.employeesList}" 
                            required="true">
                        <f:selectItems value="#{mymb.employeesList}" var="emp"
                                itemLabel="#{emp.employeeName}" />
                        <p:ajax listener="#{mymb.handleChange}"   />  
                    </p:selectOneMenu>                  
                </p:panelGrid>
            </h:form>
        </h:body>
    </ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

jsf primefaces jsf-2

19
推荐指数
5
解决办法
17万
查看次数

未调用JSF CommandButton操作

我有一个问题,没有调用JSF CommandButton操作.我有一个托管bean roleController,如

@ManagedBean(name = "roleController")
@RequestScoped
public class RoleController {
        public Role getSelectedRole() {
    return selectedRole;
}

public void updateSelectedRole() {
    System.out.println(selectedRole.getRole());
}
Run Code Online (Sandbox Code Playgroud)

在我的.jsf文件中,我正在尝试在h:commandButton上编辑调用updateSelectedRole操作,但它似乎不起作用.我试图将方法名称更改为不正确的名称,并且没有抛出异常 - 但是当我对其他表单执行相同操作时,抛出异常 - 因此很可能甚至不会调用该操作.

<h:panelGroup rendered="${param.action == 'edit'}">
    <h:form>
        <ol>
            <li>
                <label for="ID">
                    <h:outputText value="#{msg.roleEditID}" />
                </label>
                <h:inputText readonly="true" 
                    value="#{roleController.selectedRole.id}" />
            </li>
            <li>
                <label for="Role">
                    <h:outputText value="#{msg.roleEditRole}" />
                </label>
                <h:inputText value="#{roleController.selectedRole.role}" />
            </li>
            <li>
                <h:commandButton value="#{msg.buttonUpdate}" 
                    action="#{roleController.updateSelectedRole()}"/>
            </li>
        </ol>
    </h:form>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

我发现它可能是嵌套表单引起的,但在本例中并非如此.这个问题的根源是否可能是我的导航规则?

<navigation-rule>
    <from-view-id>/admin/roles.xhtml</from-view-id>
    <navigation-case>
        <to-view-id>/admin/roles.xhtml</to-view-id>
        <from-outcome>true</from-outcome>
        <redirect>
            <view-param>
                <name>action</name>
                <value>edit</value>
            </view-param>
        </redirect>
    </navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)

java jsf java-ee

18
推荐指数
2
解决办法
5万
查看次数

JSF 2应用程序中的默认Managed Bean Scope是什么?

通常,默认范围是请求范围.我试图删除范围注释并期望bean有一个请求bean scopped行为(通过在前一页上返回一个提交的值,我记得我已经尝试过这个过去并且它工作正常)但我没有得到任何关于表达语言连接到它.那么什么是默认范围以及它为什么不是相同的行为?!

jsf

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

在Java类中注入EJB时出现NullPointerException

我认为这个问题引发了,因为我没有得到EJB的东西.我有一个我的实体的服务类,它是@Stateless.当我通过在我的会话范围演示模型中注入@EJB来使用它时,一切正常.但是现在我想在我已覆盖的DataModel中使用这个EJB服务,以便在我的演示模型中使用:

public class LazyUserDataModel extends LazyDataModel<User> {

    @EJB
    private UserService service;

    @Override
    public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) {
        List<User> users;
        users= service.findAllUsers();
        this.setRowCount(users.size());
        return users; 
    }
}
Run Code Online (Sandbox Code Playgroud)

执行时,我在"users = service.findAllUsers();"位置获得NullPointerException.当我在演示模型中覆盖此DataModel时,同样有效:

@Named
@SessionScoped
public class UserPM {
    @EJB
    private UserService service;

    private LazyDataModel<User> lazyUsers;

    public UserPM() {

            // Don't works
            //lazyUsers = new LazyUserDataModel();

            lazyUsers = new LazyDataModel() {
            @Override
                public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) {
                    List<User> …
Run Code Online (Sandbox Code Playgroud)

java jsf ejb

15
推荐指数
2
解决办法
2万
查看次数

如何正确使用isUserInRole(角色)

防止用户角色执行操作.

  1. 示例1:角色"administrator"是允许执行销毁操作的唯一角色.
  2. 示例2:与"guest"不同的任何角色都可以执行CREATE操作.

在一个真实的案例中,我有这个:

public String delete() {
 if(FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator"){
   //.....the action to perform
 }
 return "Denied";
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用@RolesAllowed()EJB 的注释,但我不使用EJB而是使用ManagedBeans.所以问题是:有没有办法同时使用多个角色?一些解决方法!示例:如果必须允许对3个角色执行操作(管理员,主持人,经理).我有义务这样做:

if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator")
    || FacesContext.getCurrentInstance().getExternalContext().isUserInRole("manager") 
    || .....) {
  //....
}
Run Code Online (Sandbox Code Playgroud)

重现所有方法都很痛苦.像数百种方法的东西:(

jsf servlets java-ee

14
推荐指数
2
解决办法
2万
查看次数

p:selectOneMenu没有在bean中设置值

快问.在使用SelectOneMenu之前,我没有想到这一点.这是我的代码.

<h:outputLabel for="listaRegiones" value="Región: " />
<p:selectOneMenu id="listaRegiones" value="#{nuevaProvincia.regionSelect}" required="true">
    <f:selectItems value="#{nuevaProvincia.regiones}" />
</p:selectOneMenu>
<p:message for="listaRegiones" />
Run Code Online (Sandbox Code Playgroud)

这是我的支持豆.

@ManagedBean(name="nuevaProvincia")
@ViewScoped
public class nuevaProvincia implements Serializable {

    public static final long serialVersionUID = 1L;

    public nuevaProvincia() throws DAOException {
        this.provincia = new Provincia();
        this.regiones = new ArrayList<SelectItem>();
        ArrayList<Region> regs = new ArrayList<Region>();
        try
        {
            regs = Region.obtenerRegiones();
        }
        catch(DAOException e)
        {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Hubo un error: "+e.getMessage(), "Hubo un error: "+e.getMessage()));
        }
        if(regs.size()>0)
        {
            for(Region r : regs)
            {
                SelectItem …
Run Code Online (Sandbox Code Playgroud)

jsf updatemodel selectonemenu primefaces

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

我应该如何以及何时从数据库中为h:dataTable加载模型

我有一个数据表如下:

<h:dataTable value="#{bean.items}" var="item">
Run Code Online (Sandbox Code Playgroud)

我想用从服务方法获得的数据库中的集合填充它,以便在初始(GET)请求期间打开页面时立即显示它.我什么时候应该打电话给服务方法?为什么?

  1. 在加载页面之前调用它.但是怎么样?
  2. 在页面加载期间调用它.怎么样?
  3. 在getter方法中调用它.但它被多次调用.
  4. 别的什么?

datatable getter jsf loading

13
推荐指数
1
解决办法
8062
查看次数

从JSF应用程序的任何Web浏览器强制保存为对话框

我已经创建了一个JSF应用程序,我想在一个页面中嵌入一个链接,当点击它时会导致支持bean编组一些xm​​l并强制打开另存为下载对话框,以便用户可以选择一个位置保存文件.我已经编写了JAXB代码.

这是怎么做到的?

谢谢

java jsf

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

将jQuery添加到PrimeFaces导致所有地方都出现Uncaught TypeError

我正在使用PrimeFaces 3.5和JSF 2.0.我想使用jQuery插件,所以我在我的webapp中包含了jQuery.

<h:head>
    <h:outputScript name="js/jquery.min.js" />
    <h:outputScript name="js/jquery-ui.js" />
</h:head>
Run Code Online (Sandbox Code Playgroud)

但是,在使用PrimeFaces组件时,我会收到类似未捕获的类型错误:

未捕获的TypeError:无法读取未定义的属性"长度"

未捕获的TypeError:对象[object Object]没有方法'autocomplete'

未捕获的TypeError:无法读取未定义的属性'keyCode'

未捕获的TypeError:this.jq.draggable不是函数

未捕获的TypeError:无法读取未定义的属性"LinearAxisRenderer"

未捕获的TypeError:对象[object Object]没有方法'fileupload'

未捕获的TypeError:this.jqEl.datetimepicker不是函数

等等.

这是怎么造成的,我该如何解决?

jquery jsf typeerror primefaces

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