在请求属性中,我有对象列表(例如用户对象),那么如何循环它在我的 jsp 页面上显示数据?我可以使用<c:foreach>,但是我怎么能说它是 User 对象并访问它的属性呢?
如何使用此标签调用类中的特定方法?
<jsp:useBean id="user" scope="??" class="com.example.User" type="com.example.User" />
下面的 jstl 代码应该基于此控制器方法解析 json 文件:
控制器
@RequestMapping(value="listagem.json", method=RequestMethod.GET)
@PreAuthorize("hasPermission(#user, 'listagem_'+#this.this.name)")
public ModelAndView listagem_json(@RequestParam("pagina") String pagina, @RequestParam("items") String items, @RequestParam("ordem") String ordem) {
ModelAndView mav = new ModelAndView();
mav.setViewName("listagem");
mav.addObject("lista", serv.listagem(pagina, items, ordem));
mav.addObject("map", serv.getListaAtributos());
return mav;
}
Run Code Online (Sandbox Code Playgroud)
jstl代码
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
<json:array name="item" var="item" items="${lista}">
<json:object>
<c:forEach var="attr" items="${map}">
<c:choose>
<c:when test="${empty attr.value}">
<json:property name="${attr.key}" value="${item[attr.key]}"/>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${item.class.name == 'List'}">
<json:array name="${attr.key}" var="attr2" items="${item[attr.key]}">
<json:object>
<c:forEach var="attr3" items="${attr.value}">
<json:property …Run Code Online (Sandbox Code Playgroud) 我有一个带有嵌入式 tomcat 的 spring-boot web 应用程序,运行在端口 28081 上,httpd 配置为这样的代理:
ProxyPass / http://localhost:28081/
ProxyPassReverse / http://localhost:28081/
Run Code Online (Sandbox Code Playgroud)
然后在 jsp 页面中,我需要将完整的请求 URL 传递给 Silverlight 小部件;但是
${pageContext.request.serverName}:${pageContext.request.serverPort}
Run Code Online (Sandbox Code Playgroud)
将解决http://localhost:28081。
所以我想依靠X-Forwarded-Host,但有些情况下它确实包含多个代理地址,用逗号分隔。我不确定相信地址的顺序将被保留是否安全。
有没有更好的方法来做到这一点,是在 jsp 中,在 httpd 配置中还是在控制器代码中?
我有复合组件DocumentSelector,它包含另一个复合组件modalWindow.
<cc:interface componentType="selector.DocumentSelector">
<cc:attribute name="showSelector"
method-signature="void listener(java.util.List)"/>
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
<ccs:modalWindow id="modal_window" showListener="#{cc.showSelector}"
mode="ajax">
</ccs:modalWindow>
</div>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
我需要将方法从faces组件传递#{cc.showSelector}给复合modalWindow组件DocumentSelector.但我有PropertyNotFoundException
因为与组件ElResolver相关而不是#{cc}modalWindowDocumentSelector
modalWindow组件:
<cc:interface componentType="statistics.ModalWindow">
<cc:attribute name="showListener" method-signature="void show()"/>
<cc:attribute name="hideListener" method-signature="void hide()"/>
</cc:interface>
<cc:implementation>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
我使用Java EE 7,JSF 2.2,WildFly 8.2.0
尝试h:dataTable使用支持 bean显示 a 时出现以下异常
javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /table.xhtml @29,36 action="#{user.editEmployee}": Method not found: com.jason.jsf.User@1df228e.editEmployee()
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
javax.faces.component.UICommand.broadcast(UICommand.java:311)
javax.faces.component.UIData.broadcast(UIData.java:912)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Run Code Online (Sandbox Code Playgroud)
当我使用这些文件执行以下代码时,因为我是 jsf 的新手并且正在学习,请帮忙做一些解释
雇员.java
package com.jason.jsf;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "employee", eager = true)
@SessionScoped
public class Employee {
private String Id, name;
private boolean canEdit;
public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Employee(String id, String name) {
super();
Id = id;
this.name = name;
}
public String …Run Code Online (Sandbox Code Playgroud) 我试图在我的JSF页面中获取一个静态变量.
我按照这篇文章的说明.我可以使用Primefaces扩展来获取变量,但是,在执行以下操作时,我没有在xhtml中获得任何内容.
我有一个常量文件:
public class Test {
public static final String NAME = "EL Test";
}
Run Code Online (Sandbox Code Playgroud)
在balusC的帖子之后,我添加了一个应用程序范围的bean(但是,每次请求都会调用它):
import java.lang.reflect.Field;
import javax.annotation.PostConstruct;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean(eager = true)
@ApplicationScoped
public class Config {
@PostConstruct
public void init() {
FacesContext.getCurrentInstance().getApplication().addELContextListener(new ELContextListener() {
@Override
public void contextCreated(ELContextEvent event) {
event.getELContext().getImportHandler().importClass("my.package.constants.Test");
Class<?> clazz = event.getELContext().getImportHandler().resolveClass("Test");
for (Field field : clazz.getFields()) {
System.out.println(field.getName());
}
System.out.println("clazz = " + clazz);
System.out.println(clazz.getPackage());
}
});
}
} …Run Code Online (Sandbox Code Playgroud) 我有两个 xhtml 文件,一个包含另一个。我已经知道如何将控制器和要调用的方法传递给对话框,我不确定是否可能,是将参数/对象实际传递给将被调用的方法。我尝试了类似的方法,但是 Eclipse 告诉我这部分有语法错误
actionListener="#{bean[confMethod(param1, param2)]}"
但它没有任何问题
actionListener="#{bean[confMethod]}"
文件1.xhtml:
<ui:composition>
.....
<ui:include src="/jsf/include/dg_confirm.xhtml">
<ui:param name="bean" value="#{myController}" />
<ui:param name="question" value="Are you sure?" />
<ui:param name="confMethod" value="myMethod" />
<ui:param name="param1" value="#{otherController.param1}" />
<ui:param name="param2" value="#{urlToFollow}" />
</ui:include>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
和对话框
dg_confirm.xhtml
....
<p:commandButton value="Yes" oncomplete="PF('dlg_conf').hide();" actionListener="#{bean[confMethod(param1, param2)]}" ajax="false"/>
.....
Run Code Online (Sandbox Code Playgroud)
问题:是否可以在 JSF 中以某种方式传递方法的参数?
我正在使用 Java 15 和 JSF 2.3 以及 PrimeFaces 8 开发一个简单的 JSF Web 应用程序(主要用于学习),并且我正在使用一个简单的 Java 记录来对实体进行建模。该应用程序不使用任何数据库。
我的问题是是否可以将 java 记录用作 xhtml 页面中的值,如下所示
<p:column headerText="Id">
<h:outputText value="#{car.randomId}" />
</p:column>
Run Code Online (Sandbox Code Playgroud)
因为我收到以下错误
javax.el.PropertyNotFoundException: The class 'com.company.Car' does not have the property 'id'.。我试过放置car.year(),但没有用。记录的定义是这个
public record Car (String randomId, String randomBrand, int randomYear, String randomColor, int randomPrice, boolean randomSoldState) {
}
Run Code Online (Sandbox Code Playgroud)
在 pom.xml 中,我使用以下 api
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
我正在使用tomcat 7.0.现在我面临一个无法加载css和js文件的问题.尝试添加$ {pageContext.request.contextPath}但不起作用,也尝试了c:url标签,但在eclipse中遇到语法错误.
这些文件的结构是:
WebContent
-content/css/lab3.css
html和js文件夹也在内容文件夹下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>lab3</display-name>
<welcome-file-list>
<welcome-file>/content/html/lab3.html</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)
这是html头:
<link rel="stylesheet" type= "text/css" href= "${pageContext.request.contextPath}/css/lab3.css" media="screen, projection">
Run Code Online (Sandbox Code Playgroud) el ×10
jsf ×4
java ×3
jsf-2 ×3
jsp ×3
jstl ×3
apache ×1
java-record ×1
json ×1
primefaces ×1
proxypass ×1
spring-boot ×1
tomcat ×1
tomcat8 ×1