我正在学习JSF,当我意识到每当我们使用时<h:form>,JSF的标准行为总是向我显示浏览器中上一页的URL ,而不是当前页面的URL,我感到非常惊讶和困惑.
我知道这与JSF总是将表单发布到同一页面的方式有关,然后只是呈现控制器将其返回给浏览器的任何页面,而浏览器不知道页面位置已更改.
似乎JSF已经存在了足够长的时间,必须有一个干净,可靠的方法来处理这个问题.如果是这样,你介意分享吗?
我找到了各种解决方法,但遗憾的是,这似乎不是一个真正可靠的解决方案.
"?faces-redirect=true"到每个 bean的操作的返回值然后
@RequestScoped用其他东西替换(Flash Scopes,CDI对话,@ SessionScoped,......).如果它"?faces-redirect=true"是如此好,有没有办法配置整个应用程序以这种方式处理所有请求?
我想了解在XML Schema和WSDL中使用的targetNamespace的目的.实际上,为了简单起见,我们将这个问题限制为XML Schema.
我觉得我完全理解(简单)XML命名空间的概念.按照惯例,我们使用URI/URL,但我们可以使用任何字符串,然后我们将其分配给前缀以供XML节点和属性重用,或者仅用作手头作用域的默认命名空间.到现在为止还挺好 ?
现在进入XML Schema.出于某种原因,XML Schema的发明者认为简单命名空间的概念是不够的,他们不得不引入targetNamespace.我的问题是:targetNamespace引入了哪些重要的好处,而普通的XML命名空间无法提供这些好处?如果XML文档通过schemaLocation或import语句引用xsd文档,则在任何一种情况下,我都会给出引用的实际xsd文档的路径.这是唯一定义我想要引用的Schema的内容.如果另外我想将此Schema绑定到我的引用文档中的特定命名空间,为什么我必须复制已在我引用的XML Schema中定义的精确targetNamespace?为什么我不能简单地重新定义这个命名空间,但我想在XML文档中使用这个命名空间来引用我想引用的特定XML Schema文档?
更新:
举个例子,如果我在XML实例文档中有以下内容:
<p:Person
xmlns:p="http://contoso.com/People"
xmlns:v="http://contoso.com/Vehicles"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://contoso.com/schemas/Vehicles
http://contoso.com/schemas/vehicles.xsd
http://contoso.com/schemas/People
http://contoso.com/schemas/people.xsd">
<name>John</name>
<age>28</age>
<height>59</height>
<v:Vehicle>
<color>Red</color>
<wheels>4</wheels>
<seats>2</seats>
</v:Vehicle>
</p:Person>
Run Code Online (Sandbox Code Playgroud)
为什么例如people.xsd Schema需要定义一个"http://contoso.com/schemas/People"的targetNamespace?为什么我们需要xsd文档中的targetNamespace定义?在我看来,您必须从schemaLocation的名称空间部分获得的所有内容已经包含在XML实例文档中.在xsd文档中强制存在具有相等值的targetNamespace有什么好处?
保罗回答的后续问题:
你能给我一个具体的例子,说明xsd元素名称之间的这种"冲突"变得明显,这可以解释对targetNamespace的需求吗?
好的,这是试图回答我自己的问题.如果它对您来说似乎是连贯的,请告诉我.查看保罗链接页面上的示例帮助了我.
如果我们在上面的原始问题中采用XML实例示例,我们有两个对车辆元素定义的引用.一个在XML实例文档本身中是显式且可见的,但我们还必须想象person.xsd XML Schema再次引用相同的车辆定义作为person的允许子元素.如果我们使用的每个文件都允许定义自己的车辆命名正常的命名空间,我们怎么会知道XML实例引用相同的XML模式定义为车辆因为是person.xsd?唯一的方法是强制执行命名空间的概念,该概念比原始的简单概念更严格,并且必须在多个文档中以完全相同的方式编写.
如果我不在平板电脑上写这个,我会提供一个代码示例,但在这里我将尝试描述我想到的例子.
想象一下,我们对车辆元素有两种不同的XML Schema定义.LOCATION1/vehicles.xsd将包含从该职位的问题验证(包含颜色,车轮和座位子元素)的例子中的定义,而LOCATION2/vehicles.xsd将包含一个完全不同的定义的车辆元件(比方说,包含子元素年份,型号和体积).现在,如果XML实例文档引用了location1 Schema,就像上面示例中的情况一样,但是person.xsd说person元素可以包含在location2 Schema中定义的类型的vehicle子元素,那么没有概念对于targetNamespace,XML实例将验证,即使它显然没有正确类型的车辆作为其person元素的子元素.
目标命名空间然后帮助我们确保如果两个不同的文档引用相同的第三个XML模式,它们都是引用相同模式的契约,而不仅仅是包含相似但彼此不相同的元素的模式. .
这有任何意义吗 ?
在Java中,我可以编译
Object[] obj = {new Object[1], new Object[2]};
Run Code Online (Sandbox Code Playgroud)
但我无法编译
Object obj = {new Object(), new Object()};
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,我声明one-dimensional array的Objects,并为它分配一个two-dimensional array.在第二个我宣布一个Object并为其分配一维数组.
如果Java数组扩展Object,为什么第二个代码片段不能编译?为什么第一个?
对该主题的各种部分描述使我怀疑BMT与应用程序管理的EntityManager(以及UserTransaction的使用)紧密相关,并且CMT与容器管理的EntityManager紧密相关.
任何人都可以(或指向我)清楚地解释BMT/CMT与应用程序/容器管理的EntityManager的确切关系吗?
事务划分类型和EntityManager管理类型之间允许哪些组合?
此外,UserTransaction和BMT/CMT与应用程序/容器管理的EntityManager之间的关系是什么?
编辑:根据http://www.byteslounge.com/tutorials/container-vs-application-managed-entitymanager,我可以将CMT/BMT与应用程序/容器管理的EntityManagers结合起来.这仍然让我有关于UserTransaction和BMT之间关系的问题.一个人是否意味着另一个?
编辑:与上面发布的链接相反,http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html#bnbra声称" 应用程序管理的实体管理器不会自动传播JTA事务上下文.这些应用程序需要手动访问JTA事务管理器并在执行实体操作时添加事务划分信息.javax.transaction.UserTransaction接口定义了开始,提交和回滚事务的方法.通过创建实例来注入UserTransaction实例变量用@Resource注释".对我来说,这听起来像"应用程序管理的实体管理器需要bean管理的事务划分".谁是对的?Oracle还是Byteslounge?
jpa transactions entitymanager java-ee bean-managed-transactions
我无法导出默认的{多个功能}来工作。
这是我的设置:
src/index.js:
import {foo} from './foo'
foo();
Run Code Online (Sandbox Code Playgroud)
foo.js:
const foo = () => {
console.log("Hello!");
}
export default {foo};
Run Code Online (Sandbox Code Playgroud)
和我的package.json:
{
"name": "jestjs.io",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "babel-node src/index.js",
"test": "jest"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/node": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"babel-jest": "^24.8.0",
"jest": "^24.8.0",
"nodemon": "^1.19.1"
}
}
Run Code Online (Sandbox Code Playgroud)
运行时npm start,出现以下错误消息:
/src/index.js:5
(0, _foo.foo)();
^
TypeError: (0 , _foo.foo) is not a function …Run Code Online (Sandbox Code Playgroud) 我仍然不清楚JSF immediate evaluationvs 的使用deferred evaluation,主要是因为在线示例几乎从未使用过前一种方法.
我已经看到了相当多的JSF示例,包括http://docs.oracle.com/javaee/6/tutorial/doc/中包含的那些示例,我有点困惑的事实是我几乎只看到了一些示例#{}而不是${},即使我们正在做的只是读取bean属性.
从我对这两个用途的理解,${}只能用于读取bean属性,而不是用于编写.我还没有找到关于JSF生命周期的immediatevs deferred评估的确切差异以及读取bean属性会有什么区别的明确解释.
如果每个人总是使用#{}for read bean属性,你何时会推荐使用${}?
所以,总结一下:
#{}在${}当读取 bean的属性?${}而不是#{}?${}结果与使用#{}的结果不同(你可以解释为什么结果不同)?jsf-api.jar包含各种本地化的Messages.properties文件,这些文件一方面包含javax.faces.component.UIInput.CONVERSION密钥,另一方面包含各种javax.faces.converter.*密钥.
我的问题是:
我很难理解ReentrantLock.lock()的行为
我有以下课程
import java.util.concurrent.locks.*;
class BlockingClass {
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
public void a() {
lock.lock();
System.out.println("called in method a(): lock()");
try {
System.out.println("called in method a(): await()");
condition.await();
}
catch (InterruptedException e) {}
finally {
lock.unlock();
System.out.println("called in method a(): unlock() ");
}
}
public void b() {
lock.lock();
System.out.println("called in method b(): lock()");
System.out.println("called in method b(): signalAll()");
condition.signalAll();
lock.unlock();
System.out.println("called in method b(): unlock() ");
}
}
Run Code Online (Sandbox Code Playgroud)
我运行以下测试:
class BlockingClassTest …Run Code Online (Sandbox Code Playgroud) 修改 prevState 的一部分并在 setState() 中返回该部分是否有真正的缺点?
例子:
this.setState(prevState => {
prevState.myObject.isItTrue = !prevState.myObject.isItTrue;
return {myObject: prevState.myObject};
});
Run Code Online (Sandbox Code Playgroud)
而不是:
this.setState(prevState => {
const myObject = Object.assign({}, prevState.myObject);
myObject.isItTrue = !myObject.isItTrue;
return {myObject: myObject};
});
Run Code Online (Sandbox Code Playgroud)
我保存自己的第一个代码有什么真正的缺点Object.assign()吗?
编辑:如果我是对的,prevState.myObject 只是对 this.state.myObject 的引用,因此更改 prevState.myObject 实际上也会更改 this.myObject.object!然而,这似乎并没有破坏任何东西,只要我使用 setState() 传递一个包含新数据的对象,即使它只是对 this.state 中旧对象的引用。您是否同意这仍然可以,即这样做不会破坏任何事情?
我记得在Java字节码中没有看到任何引用变量类型的概念.我对类型擦除有点了解,但是这个术语似乎与泛型紧密相关,而我的问题一般是关于对象引用变量.Java对象引用变量类型是否在编译后存活?或者变量类型只是起到帮助编译器帮助开发人员检查代码是否有意义的作用?如果引用变量类型在编译中存活,它们在字节码中出现在哪里?
编辑:请允许我在此感谢您的宝贵贡献.为了更多地考虑我的想法,我想补充一个例子:
Object o = "foo";
Run Code Online (Sandbox Code Playgroud)
在字节码中,变量o及其类型(Object)是否可以在任何地方表示并在运行时读取?
我有以下代码:
<h:form>
<h:inputText id="inputField" value="#{bean.myProperty}">
<f:validateLongRange
minimum="#{bean.minimum}"
maximum="#{bean.maximum}"/>
</h:inputText>
<h:commandButton id="submit" value="Submit" >
<f:ajax execute="inputField" render="outputField errors" />
</h:commandButton>
<h:outputText id="outputField" value="#{bean.myPropertyFormatted}"/>
<h:message id="errors" for="inputField"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
当对inputText的验证失败时,我想从用户删除/隐藏outputText。做到这一点的最优雅,最面向未来的方法是什么?
我尝试rendered="#{!facesContext.validationFailed}"在outputText元素上设置属性,但这仅决定了outputText元素是否被重新渲染,而不是使旧文本保持不变。但是,当validateLongRange验证失败时,我想从用户完全删除/隐藏outputText,因为用户将选择验证错误消息,并且不希望基于先前的有效输入选择旧的输出消息,即仍然将值存储在Bean中。
jsf ×4
java ×3
arrays ×1
babel ×1
bytecode ×1
compilation ×1
concurrency ×1
converter ×1
ecmascript-6 ×1
el ×1
java-ee ×1
javascript ×1
jpa ×1
localization ×1
managed-bean ×1
namespaces ×1
navigation ×1
node.js ×1
properties ×1
reactjs ×1
redirect ×1
reference ×1
transactions ×1
url ×1
validation ×1
variables ×1
xml ×1
xsd ×1